Заметки, Проекты → Сравниваем классы в php
Давно хотел сравнить между собой обычные методы классов и статичные, но все руки не доходили. Сегодня вот столкнулся с приватным фреймворком, в котором ВСЕ методы и параметры статичные. Вообще все, т.е. нет ни одного обычного объекта! Откладывать сравнение было уже нельзя, чем я и занялся утром. Результаты неоднозначные, даже странные для меня, местами. В общем, «непоняно» что и как… На Ваш суд выношу результаты тестов, а Вы попробуйте мне объяснить почему результаты именно такие. Кстати, я не буду сравнивать размер используемой памяти, т.к. тут как-раз все понятно — статичные методы и свойства явно будут меньше кушать памяти. Это понятно.
Итак, начнем. Для начала, попробуем сравнить между собой «сферических конец в вакууме», т.е. классы-пустышки. Код у нас получится примерно такой:
<?php
class ClassStatic {
public static function test() {
;
}
}
class ClassDinamic {
public function test() {
;
}
}
$static = array();
$dinamic = array();
for ($count = 0; $count < 100; $count++) {
$start = microtime(TRUE);
for ($i = 0; $i <= 1000; $i++)
ClassStatic::test();
$static[$count] = microtime(TRUE) - $start;
$start = microtime(TRUE);
$obj = new ClassDinamic();
for ($i = 0; $i <= 1000; $i++)
$obj -> test();
$dinamic[$count] = microtime(TRUE) - $start;
}
echo 'Static: min - ' . min($static) . '; max - ' . max($static) . '; avg - ' . array_sum($static) / 100 . "<br />\n";
echo 'Dinamic: min - ' . min($dinamic) . '; max - ' . max($dinamic) . '; avg - ' . array_sum($dinamic) / 100 . "<br />\n";