我刚读到这个answer by Bill Karwin .
请注意,$node
是通过引用传递的。
我一直认为在那里创建的变量只是临时的,并且只存在到循环结束(或者它可能保持设置为最后一次迭代 - 我没有测试过)。
那么,通过引用传递有什么好处呢?
我确定有一个,但我还想不出来。
最佳答案
它与更快或更高效无关。
PHP 实现了写时复制,因此一个变量可以引用相同的内存区域,直到您更改它的值。然后,当您更改变量时,PHP 会根据您是按值还是按引用访问它来决定是否创建副本。
按值访问——对变量的更改创建一个副本:
$a = array("abc");
foreach ($a as $element) {
$element = "def";
}
print_r($a);
Array
(
[0] => abc
)
通过引用访问——对变量的更改会影响原始副本:
foreach ($a as &$element) {
$element = "def";
}
print_r($a);
Array
(
[0] => def
)
请注意,PHP 5 中的所有对象都是通过引用访问的,无需使用&
运算符。
这是使用对象的一个很好的理由!
在 PHP 中使用引用要非常小心,因为它们会产生困惑的效果。
请务必阅读此博客:Do not use PHP references由 PHP 核心开发人员 Johannes Schlüter 编写
关于php - 在 PHP 的 foreach 循环中通过引用传递迭代器有什么优点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3261367/