Являются ли методы магии лучшей практикой в ​​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 генерировать необходимые методы (как многие сеттеры и геттеры) по моей идее.