Магические методы - лучшая практика в PHP?
Магические методы - лучшая практика в PHP?
4 ответа
Я не думаю, что магические методы - лучшая или худшая практика: в зависимости от того, чего вы хотите достичь, вы можете использовать их или нет... Я имею в виду, что вам не нужно настраивать свой код, чтобы использовать их, но если вам нужно, то нет никаких проблем.
Если у вас есть объект с 3 и только 3 атрибутами, вам не нужно использовать магические сеттеры / геттеры, но в некоторых сложных случаях они являются отличным способом сделать очень сложные вещи (системы ORM и т. Д.)
Может быть, некоторые из них устарели, я не знаю, но большинство из них нет.
минусы
Текстовый поиск не находит функции
Система сложнее понять, особенно для новичков
Инструменты рефакторинга могут чаще выходить из строя
Как правило, магические методы делают вещи негласно, и программист может не осознавать, что это происходит, что затрудняет отладку.
Когда поиск функций (или других символов) не может найти все совпадения, удаление старого кода становится кошмаром, и этот страх может привести к накоплению мертвого кода в базе кода. Если мертвый код удаляется, это может привести к поломке в неизвестных местах.
По крайней мере, некоторые из этих волшебных функций рекомендуются Google:
Избегайте написания наивных сеттеров и геттеров
При написании классов на PHP вы можете сэкономить время и ускорить выполнение ваших сценариев, работая непосредственно со свойствами объекта, а не писать наивные установщики и получатели. В следующем примере класс dog использует методы setName() и getName() для доступа к свойству name.
class dog { public $name = ''; public function setName($name) { $this->name = $name; } public function getName() { return $this->name; } }
Обратите внимание, что setName() и getName() не делают ничего, кроме store и возвращают свойство name соответственно.
$rover = new dog(); $rover->setName('rover'); echo $rover->getName();
Установка и вызов свойства name напрямую может выполняться на 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
В любом случае, эти методы могут быть неэффективными, но они вообще не устаревают.
Я так не думаю. Моя IDE не в состоянии показать мне "подсказки" для магических сеттеров и геттеров. Хотя код иногда сложнее отлаживать.
Я предпочитаю не использовать их, лучше генерировать необходимые методы (например, многие сеттеры и геттеры) по моим идеям.