5

我正在为高级考试学习 PHP。实践测试说第一次迭代比第二次好。我不明白为什么。他们都很好地迭代了数组的内容。

// 第一:

 foreach($array as $key => &$val) { /* ... */ }

// 第二个:

foreach($array as $key => $val) { /* ... */ }
4

2 回答 2

10

实践测试说第一次迭代比第二次好。

这不是最好的建议。它们是用于不同工作的不同工具。

&通过引用而不是副本来处理变量的方法。

当你有一个变量引用时,它类似于 C 中的一个指针。访问变量可以让你访问原始变量的内存位置,允许你通过不同的标识符来修改它的值。

// Some variable.
$a = 42;

// A reference to $a.
// & operator returns a reference.
$ref = &$a;

// Assignment of $ref.
$ref = "fourty-two";

// $a itself has changed, through
// the reference $ref.
var_dump($a); // "fourty-two"

CodePad上的参考示例。

的正常行为foreach是使副本可用于关联的块。这意味着您可以自由地重新分配它,并且它不会影响数组成员(对于始终是引用的变量,例如类实例,情况并非如此)。

在CodePad上复制示例。

CodePad上的类实例示例。

在 a 中使用引用foreach有一些副作用,例如$val对迭代的最后一个值的悬空引用,稍后可能会意外修改并影响数组。

CodePad上的悬空参考示例。

于 2013-05-15T06:50:02.670 回答
1

第一个示例包括&用于 --> 的引用运算符,$val任何更改$val都将保存到$array.

不过,这绝不比示例#2“更好”。

于 2013-05-15T06:51:57.343 回答