PHP引用,奇怪的现象,有人可以解释一下吗?

时间:2010-11-02 13:41:06

标签: php loops reference

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运行它而不是最后一个预期输出出现,但是,在使用引用的第一个循环之后,任何循环没有引用将改变最后的价值....这让我完全难过。谁能给我一个解释?

1 个答案:

答案 0 :(得分:4)

如果您通过引用循环,则取消设置($ test)否则引用仍然存在。

foreach($test1 as $key => &$test) 
{ 
    echo $test['val'] . "\n"; 
} 
unset($test);

此行为为well documented

警告 即使在foreach循环之后,$ value和最后一个数组元素的引用仍然存在。建议通过unset()销毁它。