В чем смысл методов __get() и __set()

Сегодня я прочитал Учебное пособие по MVC, парень использовал магические методы (__get & __set()) для доступа к закрытому значению члена. (ССЫЛКА) Сначала я был озадачен тем, что делают __get и __set, но после прочтения проблем с Интернетом я наконец-то узнал, что эти методы вызываются, если член недоступен извне. До сих пор...

Но не имеет смысла иметь такой код:

класс Foo {
    частный бар $;

    public __set($value) {
        $this->bar = $value;
    }

    public __get() {
        вернуть $this->bar;
    }
}

Я могу использовать нормальный метод получения и установки, я думаю - его IMO гораздо проще понять:

класс Foo {
    частный бар $;

    public setBar($value) {
        $this->bar = $value;
    }

    public getBar() {
        вернуть $this->bar;
    }
}

Если вы хотите получить доступ к члену снаружи с помощью __get & __set, вы также можете сделать его общедоступным - поэтому я не понимаю, в чем его смысл. Можете ли вы сказать мне (может быть, с примером), в чем смысл этих 2 методов?

1 ответ

Решение

Вы разрабатываете свою программу и считаете, что вам не нужно контролировать доступ к вашим атрибутам. Поэтому вы ставите публичное вместо частного. Но во время обслуживания вы понимаете, что вам нужно изменить свой класс, чтобы наложить ограничение так, чтобы ему было запрещено 0 для атрибута. Чтобы внести это изменение, вам нужно добавить сеттер и провести свой атрибут в секрете. Результат: это поможет вам повлиять на это изменение для всех клиентов этого класса.

Если бы вы использовали сеттеры и геттеры с самого начала, обслуживание было бы намного проще.

Другие вопросы по тегам