Являются ли методы магии лучшей практикой в ​​PHP?

Являются ли методы магии лучшей практикой в ​​PHP?

Я не думаю, что магические методы – лучшая или худшая практика: в зависимости от того, чего вы хотите достичь, вы можете использовать их или нет … Я имею в виду, что вам не нужно настраивать свой код, чтобы использовать их, но если вам нужно, то проблем нет.

Если у вас есть объект с 3 и только 3 атрибутами, вам не нужно использовать магические сеттеры / геттеры, но в некоторых случаях это отличный способ сделать очень сложные вещи (системы ORM и т. Д.).

Может быть, некоторые из них устарели, я не знаю, но большинство из них – нет.

минусы

  1. Поиск текста не находит функции

  2. Систему сложнее понять , особенно для новичков

  3. Инструменты рефакторинга могут выходить из строя чаще

Как правило, волшебные методы делают вещи за кулисами, и программист может не осознавать, что это происходит, что делает отладку сложнее.

При поиске функций (или других символов) не удается найти все совпадения, это становится кошмаром для удаления старого кода, и этот страх может привести к тому, что мертвый код будет накапливаться в кодовой базе. Если мертвый код удален, это может привести к поломке в неизвестных местах.

По крайней мере, некоторые из этих магических функций рекомендуются 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 () ничего не делают, кроме как хранить и возвращать свойство 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

В любом случае, эти методы могут быть неэффективными, но они вовсе не устарели.

Я так не думаю. Моя IDE не может показать мне «подсказки» для магического сеттера и геттеров. На самом деле код сложнее отлаживать.

Я предпочитаю не использовать их, bette генерировать необходимые методы (как многие сеттеры и геттеры) по моей идее.