Являются ли методы магии лучшей практикой в PHP?
Являются ли методы магии лучшей практикой в PHP?
Ответ 1
Я не думаю, что магические методы - лучшая или худшая практика: в зависимости от того, чего вы хотите достичь, вы можете использовать их или нет... Я имею в виду, что вам не нужно настраивать свой код, насколько это возможно, чтобы использовать их, но если вам вообще не нужно никаких проблем.
Если у вас есть объект с 3 и только 3 атрибутами, вам не нужно использовать магические сеттеры/геттеры, но в некоторых современных случаях это отличный способ сделать очень сложные вещи (системы ORM и т.д.)
Возможно, некоторые из них устарели, я не знаю, но большинство из них не являются.
Ответ 2
против
-
Поиск текста не найти функции
-
Система сложнее понять, особенно для новичков
-
Инструменты рефакторинга могут чаще выполняться
Как правило, волшебные методы делают вещи за кулисами, и программист может не осознавать, что это происходит, что делает отладку сложнее.
При поиске функций (или других символов) не удается найти все совпадения, они становятся кошмаром для удаления старого кода, и этот страх может привести к тому, что мертвый код будет накапливаться в кодовой базе. Если мертвый код удален, это может привести к поломке в неизвестных местах.
Ответ 3
По крайней мере, некоторые из этих магических функций рекомендуются Google:
Избегайте писать наивные сеттеры и геттеры
При написании классов в PHP вы можете сэкономить время и ускорить скриптов, напрямую работая с объектными свойствами, а не написание наивных сеттеров и геттеров. В следующем примере собака класс использует методы setName() и getName() для доступа к имени свойство.
class dog { public $name = ''; public function setName($name) { $this->name = $name; } public function getName() { return $this->name; } }
Обратите внимание, что setName() и getName() ничего не делают, кроме как хранить и верните свойство name, соответственно.
$rover = new dog(); $rover->setName('rover'); echo $rover->getName();
Настройка и вызов свойства имени напрямую могут выполняться до 100% быстрее, а также сократить время разработки.
$rover = new dog(); $rover->name = 'rover'; echo $rover->name;
Оригинальная ссылка: http://code.google.com/speed/articles/optimizing-php.html
Архивированная версия: https://web.archive.org/web/20120208060457/http://code.google.com/speed/articles/optimizing-php.html
Во всяком случае, эти методы могут быть неэффективными, но они вовсе не устарели.
Ответ 4
Я так не думаю. Моя IDE не может показать мне "подсказки" для магического сеттера и геттеров. Хотя код иногда сложнее отлаживать.
Я предпочитаю не использовать их, bette генерировать необходимые методы (как многие сеттеры и геттеры) по моей идее.