Intereting Posts
как я могу связать / использовать PDT с eclipse в ubuntu? terr Может ли закодированная строка base64 содержать пробелы? Инструментальная панель инструментов Heroku и LD_LIBRARY_PATH Активная запись Codeigniter 2 – Как создать временную таблицу для применения второго порядка сортировки? Как создать объект из String? Как использовать Doctrine «пусто» в выражении? Каков самый быстрый способ выбрать ближайшее географическое место из базы данных mysql? Laravel Basic HTTP Auth Check Возврат False PHP array_multisort не сортирует мой многомерный массив, как ожидалось Генерация случайных эскизов с помощью PHP + FFMPEG PHP. Создайте вложенный массив из данных MySQL. Как я могу переписать мой PHP и MySQL для группировки моего списка HTML равными значениями столбцов? Запрос jQuery AJAX завершается ошибкой 503 только с параметром «http://example.com» в качестве значения Как написать конкретный CSS для mozilla, chrome и IE JSON недействителен (JSONview), но я не вижу, как

Каковы общие рекомендации по использованию магии для геттеров и сеттеров?

Исходя из строго типизированных языков, мне неудобно использовать магические методы getter и setter для PHP. Какова мотивация их внедрения на язык и каковы общие рекомендации по их использованию?

Редактировать:

Я понимаю мотивацию использования геттеров и сеттеров в целом. Меня интересует мотивация использования методов магии getter и setter (в отличие от методов setProperty($property) и getProperty() ).

Я вижу, как волшебные геттеры и сеттеры PHP являются одной из его болезней.
Когда программисту нужно иметь дело со строками внутри кода, он и его команда начинают делать ошибки … (это я думаю, что вам следует избегать столько, сколько вы можете от массивов-помощников … это небезопасно)

IDE
Когда вы вводите в свой редактор $a->get вы получаете список получателей, и вам не нужно запоминать точный случай члена класса. если жизнь программиста будет нелегкой, для приложения это будет нелегко.

Программирование
На большинстве языков геттеры и сеттеры на самом деле являются функциями, где вы можете добавить небольшую логику, это не так мудро сделано в PHP.

Накладные расходы
У каждой функции PHP есть некоторые проблемы с производительностью.

Это мое мнение….

Есть разные мнения, вот что читать:

  • Отличные (PHP) геттер / сеттер дискуссии
  • Делать это неправильно: геттеры и сеттеры
  • OOP Getters () и сеттеры () – разочарование нового программиста
  • Неужели это неправильно, если не использовать сеттеров и геттеров?
  • Перегрузка объектов в PHP 5

Какова мотивация реализации [__get () и __set ()]?

Магические методы PHP, __get () и __set () также известны как методы «перегрузки». Из руководства по PHP

Интерпретация PHP «перегрузка» отличается от большинства объектно-ориентированных языков. Перегрузка традиционно предоставляет возможность иметь несколько методов с тем же именем, но с разными количествами и типами аргументов.

В то время как:

Перегрузка в PHP предоставляет возможность динамически «создавать» свойства и методы. Эти динамические объекты обрабатываются с помощью магических методов, которые можно установить в классе для различных типов действий.

В основном, __get() , __set() и __call() были введены для обеспечения возможностей перегрузки в определении перегрузки PHP.

Каковы общие рекомендации по их использованию?

Это загруженный вопрос, потому что разные люди могут иметь разные мнения. При этом они могут использоваться для:

  • сделать свойство только для чтения
  • подтверждать, что данные сохраняются / извлекаются.
  • изменить интерфейс ( например, $object->method($data) становится $object->data )

Это всего лишь несколько примеров. Вы можете найти полезные советы для __get () и __set () .

В php, если вам вообще неудобно использовать магические геттеры и сеттеры, вы можете записать их в своем классе, как это было сделано на строго типизированном языке, и вы можете использовать его, как вы его использовали. Нет никаких ограничений. Я думаю, что мы можем автоматически генерировать функции Getter и setter в некоторых рамках, таких как symfony . Вы можете написать соответствующую реализацию магических геттеров и сеттеров, если вам нужно больше принудительного ввода или контроля над свойствами.