$array = range(1, 10000);function test1($array){ return $array;}function &test2($array){ return $array;}$start = microtime(true);for ($i=0; $i < 10000; $i++) { $arr = test1($array); $arr[$i] = 'new';}$end = microtime(true);echo "Cost ".($end - $start)."\n";$start = microtime(true);for ($i=0; $i < 10000; $i++) { $arr = test2($array); $arr[$i] = 'new';}$end = microtime(true);echo "Cost ".($end - $start)."\n";
輸出結果:
Cost 5.5163149833679
Cost 6.3323628902435
雖然差距不大
回複內容:
$array = range(1, 10000);function test1($array){ return $array;}function &test2($array){ return $array;}$start = microtime(true);for ($i=0; $i < 10000; $i++) { $arr = test1($array); $arr[$i] = 'new';}$end = microtime(true);echo "Cost ".($end - $start)."\n";$start = microtime(true);for ($i=0; $i < 10000; $i++) { $arr = test2($array); $arr[$i] = 'new';}$end = microtime(true);echo "Cost ".($end - $start)."\n";
輸出結果:
Cost 5.5163149833679
Cost 6.3323628902435
雖然差距不大
拷貝需要開闢空間初始化之類的,相當於建立幾個新的對象。
而引用只是一個指標。
首先、根據 PHP: 引用返回 - Manual 的解釋,以上兩種寫法並沒有什麼區別,你可以理解沒有加 & 的那個函數底層引擎是會最佳化的,所以可能確實快了一點點,所以手冊上也是不推薦的。