ちょっと、そこ。今日、私は変数のコピーと変数への参照の作成のパフォーマンスを比較するための小さなベンチマークスクリプトを作成しました。たとえば、大きな配列への参照の作成は、配列全体をコピーするよりも大幅に遅くなると予想していました。これが私のベンチマークコードです:
<?php
$array = array();
for($i=0; $i<100000; $i++) {
$array[] = mt_rand();
}
function recursiveCopy($array, $count) {
if($count === 1000)
return;
$foo = $array;
recursiveCopy($array, $count+1);
}
function recursiveReference($array, $count) {
if($count === 1000)
return;
$foo = &$array;
recursiveReference($array, $count+1);
}
$time = microtime(1);
recursiveCopy($array, 0);
$copyTime = (microtime(1) - $time);
echo "Took " . $copyTime . "s \n";
$time = microtime(1);
recursiveReference($array, 0);
$referenceTime = (microtime(1) - $time);
echo "Took " . $referenceTime . "s \n";
echo "Reference / Copy: " . ($referenceTime / $copyTime);
私が得た実際の結果は、recursiveReferenceがrecursiveCopyの約20倍(!)かかったということでした。
誰かがこのPHPの動作を説明できますか?