10

foreach默认情况下,在 PHP7 中,按值迭代时,根据:http ://php.net/manual/en/migration70.incompatible.php 对数组的副本进行操作

它是否仅在对数组或值进行更改时才懒惰地创建副本,或者它总是会创建副本并且本质上使循环引用成为性能优化?

另外,对象数组是否仍然循环/给你对象的引用?还是他们实际上也会为 对象创建副本foreach并按值返回对象?

4

1 回答 1

14

在 PHP 7 中,如果您按值迭代数组,则复制将延迟完成,只有在实际修改数组时才进行。

如果您通过引用迭代数组,则将在循环开始时执行分隔。如果该数组当前在多个地方使用,这种分离将导致一个副本。

此外,通过引用进行迭代意味着a)必须将数组包装到引用中,并且b)也必须将每个元素包装在引用中。创建引用包装器是一项昂贵的操作,因为它需要分配。

此外,引用迭代要求我们使用修改安全的迭代机制。这通过向数组注册迭代器并在各种数组修改操作中检查可能受影响的迭代器来工作。

所以不,通过引用迭代当然不是优化,而是去优化。使用引用通常是。

于 2015-12-04T23:24:29.653 回答