PHP,5.3非线程安全窗口,也在Linux上的PHP 5.2.9上得到证明。
示例代码:
$test1 = array(
array("val"=>"a"),
array("val"=>"b"),
array("val"=>"c")
);
foreach($test1 as $key => $test)
{
echo $test['val'] . "\n";
}
foreach($test1 as $key => &$test)
{
echo $test['val'] . "\n";
}
foreach($test1 as $key => $test)
{
echo $test['val'] . "\n";
}
输出:
a
b
c
a
b
c
a
b
b
预期产出:
a
b
c
a
b
c
a
b
c
那会发生什么?我的第一个想法是数组指针以某种方式参与......它不是reset
什么也没做。然后我认为引用以某种方式改变了值,但是没有,如果我再次使用&test
运行它而不是最后一个预期输出出现,但是,在使用引用的第一个循环之后,任何循环没有引用将改变最后的价值....这让我完全难过。谁能给我一个解释?
答案 0 :(得分:4)
如果您通过引用循环,则取消设置($ test)否则引用仍然存在。
foreach($test1 as $key => &$test)
{
echo $test['val'] . "\n";
}
unset($test);
此行为为well documented
警告 即使在foreach循环之后,$ value和最后一个数组元素的引用仍然存在。建议通过unset()销毁它。