我们都知道
$a1 = array('foo');
$a2 = $a1;
$a2[0] = 'bar';
// now $a1[0] is foo, and $a2[0] is bar. The array is copied
但是,我记得读过但无法通过Googling确认的是,在修改之前,数组在内部不会被复制。
$a1 = array('foo');
$a2 = $a1; // <-- this should make a copy
// but $a1 and $a2 point to the same data internally
$a2[0] = 'bar';
// now $a1[0] is foo, and $a2[0] is bar. The array is really copied
我想知道这是否属实。如果是这样,那就好了。它可以在大量传递大量数据时提高性能,但无论如何只能读取它(在创建一次之后)。
答案 0 :(得分:5)
这可能比您想知道的要多,但this article很好地描述了变量在PHP中的工作方式。
一般来说,你是正确的,在绝对必要之前不会复制变量。
答案 1 :(得分:1)
我似乎证实了这一点:
<?php
ini_set('memory_limit', '64M');
function ttime($m) {
global $s;
echo $m.': '.(microtime(true) - $s).'<br/>';
$s = microtime(true);
}
function aa($a) {
return $a;
}
$s = microtime(true);
for ($i = 0; $i < 200000; $i++) {
$array[] = $i;
}
ttime('Create');
$array2 = aa($array); // or $array2 = $array
ttime('Copy');
$array2[1238] = 'test';
ttime('Modify');
给出:
Create: 0.0956180095673
Copy: 7.15255737305E-6
Modify: 0.0480329990387
答案 2 :(得分:0)
我相信你在这里是对的。我将尝试找到关于此的文档...我找不到任何关于此的内容,但我确信我在某处读到了它。希望有人在这里找到文档会有更好的运气。