php - 在 PHP 的 foreach 循环中通过引用传递迭代器有什么优点?

标签 php foreach

我刚读到这个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/

相关文章:

php - 悬停图像

php - 使用 PHP 访问 MySQL 字段的注释

c# - `foreach`如何遍历一个二维数组?

php - CakePHP 节省约定

php - 如何使用 PDO 连接另一台主机上的 mysql 数据库?

php - 从sql表中创建一个列表

powershell - 在 PowerShell 中连接到 ForEach-Object

php - Mysqli 到 foreach 内的数组;内部 foreach 与另一个 mysqli 数组无法正确读取外部数组中的值

php - 在 WooCommerce 3+ 中以编程方式创建多个优惠券

php - "\"在 PHP/MySQL 脚本中做什么