看看有多有趣,如果我们稍微改变一下代码:
$arr = array(1,2,3);
foreach ($arr as &$x) echo current($arr) . PHP_EOL;
我们得到了这个输出:
2
3
一些有趣的参考:
http://nikic.github.com/2011/11/11/PHP-Internals-When-does-foreach-copy.html
http://blog.golemon.com/2007/01/youre-being-lied-to.html
现在,试试这个:
$arr = array(1,2,3);
foreach ($arr as $x) { $arr2 = $arr; echo current($arr2) . PHP_EOL; }
输出:
2
3
1
这确实很奇怪。
那么这个呢:
$arr = array(1,2,3);
foreach ($arr as $x) { $arr2 = $arr; echo current($arr) . ' / ' . current($arr2) . PHP_EOL; }
echo PHP_EOL;
foreach ($arr as $x) { $arr2 = $arr; echo current($arr2) . ' / ' . current($arr2) . PHP_EOL; }
输出:
2 / 2
2 / 2
2 / 2
2 / 2
3 / 3
1 / 1
似乎发生的事情就像NickC答案中所写的那样,再加上当将数组作为参数传递给函数时,当它通过引用传递时,里面的某些东西确实修改了作为参数传递给它的数组......current