Основываясь на коде Quazzle, я запустил следующий код (5.4.16 windows 64bits):
<code><?php
class SomeClass {
public $aaa;
public $bbb;
public $ccc;
}
function p($i) {
echo '<pre>';
print_r($i);
echo '
';
}
$ t0 = микротайм (правда);
$ ArraysOf = массив ();
$ Inicio = memory_get_usage ();
для ($ i = 0; $ i <1000; $ i ++) {
$ z = array ();
для ($ j = 0; $ j <1000; $ j ++) {
$ z ['aaa'] = 'aaa';
$ z ['bbb'] = 'bbb';
$ z ['ccc'] = $ z ['aaa']. $ z ['bbb'];
}
$ ArraysOf [] = $ г;
}
$ Плавника = memory_get_usage ();
echo '<p> arrays:'. (microtime (true) - $ t0). "";
echo '
memory:'. ($ fin- $ inicio). "
";
р ($ г);
$ t0 = микротайм (правда);
$ ArraysOf = массив ();
$ Inicio = memory_get_usage ();
для ($ i = 0; $ i <1000; $ i ++) {
$ z = новый SomeClass ();
для ($ j = 0; $ j <1000; $ j ++) {
$ z-> aaa = 'aaa';
$ z-> bbb = 'bbb';
$ z-> ccc = $ z-> aaa. $ z-> bbb;
}
$ ArraysOf [] = $ г;
}
$ Плавника = memory_get_usage ();
echo '
arrays:'. (microtime (true) - $ t0). "
";
echo '
memory:'. ($ fin- $ inicio). "
";
р ($ г);
$ t0 = микротайм (правда);
$ ArraysOf = массив ();
$ Inicio = memory_get_usage ();
для ($ i = 0; $ i <1000; $ i ++) {
$ z = новый stdClass ();
для ($ j = 0; $ j <1000; $ j ++) {
$ z-> aaa = 'aaa';
$ z-> bbb = 'bbb';
$ z-> ccc = $ z-> aaa. $ z-> bbb;
}
$ ArraysOf [] = $ г;
}
$ Плавника = memory_get_usage ();
echo '
arrays:'. (microtime (true) - $ t0). "
";
echo '
memory:'. ($ fin- $ inicio). "
";
р ($ г);
?>
И я получил следующий результат:
arrays: 1.8451430797577
memory: 460416
Array
(
[aaa] => aaa
[bbb] => bbb
[ccc] => aaabbb
)
arrays: 1.8294548988342
memory: 275696
SomeClass Object
(
[aaa] => aaa
[bbb] => bbb
[ccc] => aaabbb
)
arrays: 2.2577090263367
memory: 483648
stdClass Object
(
[aaa] => aaa
[bbb] => bbb
[ccc] => aaabbb
)
Вывод по php 5.4
- Класс быстрее, чем массивы (но незначительно).
- stdClass это зло.
- Класс использует меньше памяти, чем массивы. (примерно на 30-40% меньше !!)
ps: как примечание, если класс определен, но члены тогда, использование этого класса медленнее. Он также использует больше памяти. Очевидно, секрет заключается в определении членов
Обновление
Я обновился с php 5.4 до php 5.5 (5.5.12 x86 windows).
arrays: 1.6465699672699
memory: 460400
Array
(
[aaa] => aaa
[bbb] => bbb
[ccc] => aaabbb
)
arrays: 1.8687851428986
memory: 363704
SplFixedArray Object
(
[0] => aaa
[1] => bbb
[2] => aaabbb
)
arrays: 1.8554251194
memory: 275568
SomeClass Object
(
[aaa] => aaa
[bbb] => bbb
[ccc] => aaabbb
)
arrays: 2.0101680755615
memory: 483656
stdClass Object
(
[aaa] => aaa
[bbb] => bbb
[ccc] => aaabbb
)
Вывод по php 5.5
- Для массивов PHP 5.5 быстрее, чем PHP 5.4, для объектов это почти то же самое
- Класс работает медленнее, чем массивы, благодаря оптимизации PHP 5.5 и массивов.
- stdClass это зло.
- Класс по-прежнему использует меньше памяти, чем массивы. (примерно на 30-40% меньше !!).
- SplFixedArray аналогичен использованию класса, но использует больше памяти.