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