да х* с ним. как-нибудь потом глубже покопаю. мне ещё роутер дописывать :)
update:Конечно я не удержался и покопал ещё :) Новый тест во вложении. Цель — сравнить self|classname и this|objectname. Еще очевидно, что если тестируемые функции не будут ничего вычислять, то разница проявится сильнее — все тестируемое время это именно затраты на вызов.
Вот типичные усреднённые результаты:
N: 0.0263(100%) 0.0314(119%) 0.0326(124%)
O: 0.0265(100%) 0.0307(116%) 0.0321(121%)
S: 0.0254(100%) 0.0313(123%) 0.0271(107%)
левая колонка - простая функция, вторая - объект, третья - класс
Я протестировал вызовы из разных мест. По строкам: N - вызов из "глобального контекста", O - из метода объекта, S - из статического метода. Таким образом я смог использовать префиксы $this и self
Видно что статический вызов получает заметное преимущество при self !
Еще я попробовал call_user_func для статики - получил около 350%. Медленный мазафака! В цикл такое помещать нельзя.
Для меня выводы такие:
-
Вне контекста нельзя сказать что «статические вызовы быстрее объектных», всё может быть наоборот.
Правильнее сказать «
self::, быстрее чем
classname:: или
$object-> или
$this->».
Кроме того, в общем случае
без контекста непонятно насколько накладно создавать сам объект.
- Важно не дробить классы слишком мелко. Тогда процент упоминаний self будет выше.
ιιlllιlllι унц-унц