PHP,5.3非线程安全窗口,也在Linux上的PHP 5.2.9上得到验证。PHP引用,奇怪的现象,有人能解释一下吗?
示例代码:
$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
而不是最后一个运行预期输出,但是,在使用参考的第一个循环之后,任何没有引用的循环都会更改最后一个价值......这让我彻底难倒了。任何人都可以给我一个解释吗?
没错。 '$ test'变量将在循环的范围之外,并且将在第二个循环之后成为一个引用。第三个循环将*赋值给该引用,覆盖这些值。 – 2010-11-02 13:47:33