【发布时间】:2012-04-29 09:48:55
【问题描述】:
最近在一个 PHP 应用程序中遇到了这个错误。不知道发生了什么。
基本上,当使用两个foreach(一个带&,一个不带)的组合时,它就会出现。
这是重现问题的测试代码:
$items = array(
array('id'=>1, 'name'=>'foo', 'value'=>150),
array('id'=>2, 'name'=>'bar', 'value'=>190)
);
foreach($items as &$item)
{
$item['percentage'] = $item['value'] * 0.75;
}
var_dump($items); // All Good
foreach($items as $item)
{
var_dump($item); // Shows 1st item twice
}
第二个foreach 循环按预期运行该块两次,但$item 仍然停留在第一个项目上。
我知道这可能是由在第一个循环中使用引用 & 引起的,但我不明白为什么它应该表现得像这样..
有什么想法吗?这是一个错误吗?
在 5.3.8、5.3.10 和 5.4 上获得相同的结果
【问题讨论】:
-
这是重用引用时众所周知的副作用。我敢肯定到处都有重复的问题。
unset($item)在第一个循环之后。 -
我很高兴人们宁愿称其为众所周知的副作用而不是错误:)
-
@FelixKling 感谢您的参考。投票结束我自己的问题(不要以为我以前做过)