オブジェクトと連想配列のパフォーマンス
でハッシュとオブジェクトのインスタンス生成の比較ベンチマークについて書かれていますが、b:id:i_ogiがブコメで言ってるように毎回配列定義するよりコピーした方が早いと思ったので試してみました。
array.php
<?php $result = array(); $insert = array('member0'=>0,'member1'=>1,'member2'=>2,'member3'=>3); for($i=0;$i<1000000;$i++) { $result[] = $insert; } echo 'Memory: '.memory_get_usage()."\n";
object.php
<?php class Test { public $member0 = 0; public $member1 = 1; public $member2 = 2; public $member3 = 3; } for($i=0;$i<1000000;$i++) { $result[] = new Test(); } echo 'Memory: '.memory_get_usage()."\n";
変更点はarray.phpでループの前で配列を定義するようにしただけです。
ベンチマーク結果
$ time php array.php Memory: 48239884 real 0m0.366s user 0m0.304s sys 0m0.062s $ time php object.php Memory: 413386464 real 0m2.194s user 0m1.855s sys 0m0.334s
ちょ、コピーのが早いのはわかっていたけどここまで違うとは。。。
「クラスの代わりに連想配列を使うのは止めるべき」じゃなくて「オブジェクトを連想配列代わりに使うのは止めるべき」かなぁと。
PHPの変数管理や配列管理の方法についてはCPA-LABテクニカルの記事が参考になります。