PHP: оператор разрешения области действия и производительность перегрузки - PullRequest
0 голосов
/ 26 августа 2011

У меня 2 вопроса:

1) Является ли оператор разрешения области (::) медленным для статического доступа (или медленнее, чем -> для экземпляра класса)?

Название вроде предполагает, что оно должно "разрешить" область видимости, поэтому я и спрашиваю.

2) А как насчет перегрузок, в частности __get() и __set()?

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

Заранее спасибо за любые ответы / советы.

Ответы [ 2 ]

2 голосов
/ 26 августа 2011
  1. Я оцениваю доступ к объектам примерно на 3% медленнее, чем статический доступ.
  2. Я измеряю __set ($ name, $ value) примерно на 97% медленнее, чем традиционный метод setBar ($ value)и примерно на 321% медленнее, чем установка свойства напрямую.
2 голосов
/ 26 августа 2011
  1. Для статических вызовов методов движок должен разрешить класс и функцию. Это стоит два поиска по хешу.

    Например, при вызове метода движок выполняет только один поиск хеша.

    Таким образом, вызовы метода экземпляра немного быстрее, чем вызовы статического метода.

  2. __ get и __set имеют накладные расходы на поиск свойства (механизм проверяет, существует ли свойство перед вызовом __get или __set) плюс накладные расходы на вызов метода.

    Так что это в два раза медленнее, чем при использовании геттера или сеттера, и в 3 или 4 раза медленнее, чем прямой доступ к свойству.

...