PHP引用数组仍然存在


PHP array by reference persists

我遇到了一些奇怪的事情,希望有人能解释发生了什么。我已经将其归结为以下在PHP版本5.3.10-1ubuntu3.21:上复制的情况

$lines = array("foo" => "bar");
foreach ($lines as &$line) { } // Trouble-causer
$temp = $lines;
foreach ($lines as $key => $line) {
    $lines[$key] = "test";
}
print_r($lines);
print_r($temp);

由于我不在$temp上工作,因此预期的结果是

Array
(
    [foo] => test
)
Array
(
    [foo] => bar
)

但实际结果是

Array
(
    [foo] => test
)
Array
(
    [foo] => test
)

如果我删除标记为Trouble-causer的行,它将按预期工作。不知何故,我通过引用循环$lines项的事实一直持续到下一次迭代。这是意料之中的事吗?

foreach的文档说明:

警告引用$value和最后一个数组元素保持偶数在CCD_ 5循环之后。建议用unset()销毁。

foreach ($lines as &$line) { } // Trouble-causer
unset($line);