PHP7中的foreach更改

时间:2015-12-04 20:59:14

标签: php foreach php-7

PHP7中的

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

只有在对数组或值进行了更改时才会懒惰地创建副本,还是总是复制它并实质上使引用循环进行性能优化?

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

1 个答案:

答案 0 :(得分:12)

在PHP 7中,如果按值迭代数组,则只有当数组实际被修改时才会延迟复制。

如果通过引用迭代数组,则会在循环开始时执行分隔。如果阵列当前在多个地方使用,则这种分离将导致复制。

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

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

所以不,通过引用迭代肯定不是优化,它是一种去优化。通常使用引用。