У меня есть настраиваемая инфраструктура MVC PHP, в которой я переписываюсь, и у меня возник вопрос о производительности и магических методах. С модельной частью рамки я думал, что если методы __get
/ __set
magic приведут к слишком большому результативному результату, который стоит использовать. Я имею в виду, что доступ к (считыванию и записи) данных модели будет одной из наиболее распространенных вещей. Является ли использование методов магии __get
/ __set
слишком большим для производительности, используемого для использования в больших функциональных возможностях, таких как модельная часть структуры MVC?
Измерьте это.
Это, безусловно, имеет большой успех, особенно учитывая, что вызовы функций дороги в PHP. Эта разница будет еще больше в следующей версии PHP, которая реализует оптимизации, которые значительно улучшают регулярный доступ к объявленным свойствам экземпляра.
Тем не менее, PHP редко является узким местом. Запросы ввода-вывода и базы данных часто занимают гораздо больше времени. Это, однако, зависит от вашего использования; это единственный способ узнать наверняка, как это сделать.
Это также другие проблемы с читабельностью магических методов. Они часто вырождаются в один большой оператор switch
и компрометируют завершение кода, оба из которых могут быть хитами в производительности программирования.
Вот статья (три года) с некоторыми ориентирами. Запустите свои собственные тесты, чтобы узнать, как это влияет на ваш код.
Вообще говоря, они намного медленнее. Но являются ли они узким местом? Это зависит от того, что вы делаете. Если вас беспокоит скорость, где она останавливается? Цикл foreach
медленнее, чем цикл for
, но большинство людей не переписывают весь свой код для использования for
.
Просто использование PHP означает, что скорость вашего кода не так уж и важна. Лично я бы хотел, чтобы любой стиль упрощал программирование.
Чисто из моего опыта, это добавляет довольно много над накладными расходами. На странице с около 4000 __get
(да, на этой странице было довольно много данных) производительность была значительно более медленной, до такой степени, что это стало неприемлемым. Я выбросил все __set
и __get
для переменных, которые не требовали бы изменения других данных или внешних зависимостей (например, внешних ключей), после чего время для создания этой страницы составляло около 15% времени это было раньше.
Я только что задал себе тот же вопрос и пришел к такому же выводу: лучше установить свойства традиционным способом. __get () + массивный переключатель замедляет все