Исходя из строго типизированных языков, мне неудобно использовать магические методы getter и setter для PHP. Какова мотивация их внедрения на язык и каковы общие рекомендации по их использованию?
Редактировать:
Я понимаю мотивацию использования геттеров и сеттеров в целом. Меня интересует мотивация использования методов магии getter и setter (в отличие от методов setProperty($property)
и getProperty()
).
Я вижу, как волшебные геттеры и сеттеры PHP являются одной из его болезней.
Когда программисту нужно иметь дело со строками внутри кода, он и его команда начинают делать ошибки … (это я думаю, что вам следует избегать столько, сколько вы можете от массивов-помощников … это небезопасно)
IDE
Когда вы вводите в свой редактор $a->get
вы получаете список получателей, и вам не нужно запоминать точный случай члена класса. если жизнь программиста будет нелегкой, для приложения это будет нелегко.
Программирование
На большинстве языков геттеры и сеттеры на самом деле являются функциями, где вы можете добавить небольшую логику, это не так мудро сделано в PHP.
Накладные расходы
У каждой функции PHP есть некоторые проблемы с производительностью.
Это мое мнение….
Есть разные мнения, вот что читать:
Магические методы PHP, __get () и __set () также известны как методы «перегрузки». Из руководства по PHP
Интерпретация PHP «перегрузка» отличается от большинства объектно-ориентированных языков. Перегрузка традиционно предоставляет возможность иметь несколько методов с тем же именем, но с разными количествами и типами аргументов.
В то время как:
Перегрузка в PHP предоставляет возможность динамически «создавать» свойства и методы. Эти динамические объекты обрабатываются с помощью магических методов, которые можно установить в классе для различных типов действий.
В основном, __get()
, __set()
и __call()
были введены для обеспечения возможностей перегрузки в определении перегрузки PHP.
Это загруженный вопрос, потому что разные люди могут иметь разные мнения. При этом они могут использоваться для:
$object->method($data)
становится $object->data
) Это всего лишь несколько примеров. Вы можете найти полезные советы для __get () и __set () .
В php, если вам вообще неудобно использовать магические геттеры и сеттеры, вы можете записать их в своем классе, как это было сделано на строго типизированном языке, и вы можете использовать его, как вы его использовали. Нет никаких ограничений. Я думаю, что мы можем автоматически генерировать функции Getter и setter в некоторых рамках, таких как symfony . Вы можете написать соответствующую реализацию магических геттеров и сеттеров, если вам нужно больше принудительного ввода или контроля над свойствами.