Магические методы - лучшая практика в PHP?

Магические методы - лучшая практика в PHP?

4 ответа

Решение

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

Если у вас есть объект с 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() не делают ничего, кроме 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 не в состоянии показать мне "подсказки" для магических сеттеров и геттеров. Хотя код иногда сложнее отлаживать.

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

Другие вопросы по тегам