В чем смысл методов __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 для атрибута. Чтобы внести это изменение, вам нужно добавить сеттер и провести свой атрибут в секрете. Результат: это поможет вам повлиять на это изменение для всех клиентов этого класса.
Если бы вы использовали сеттеры и геттеры с самого начала, обслуживание было бы намного проще.