我正在为高级考试学习 PHP。实践测试说第一次迭代比第二次好。我不明白为什么。他们都很好地迭代了数组的内容。
// 第一:
foreach($array as $key => &$val) { /* ... */ }
// 第二个:
foreach($array as $key => $val) { /* ... */ }
实践测试说第一次迭代比第二次好。
这不是最好的建议。它们是用于不同工作的不同工具。
&
通过引用而不是副本来处理变量的方法。
当你有一个变量引用时,它类似于 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上的悬空参考示例。
第一个示例包括&
用于 --> 的引用运算符,$val
任何更改$val
都将保存到$array
.
不过,这绝不比示例#2“更好”。