PHP7 中的 foreach 变化

foreach changes in PHP7

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

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

此外,对象数组是否仍然循环 over/give 您对对象的引用?或者他们实际上还会按值为 foreach 和 return 对象创建副本吗?

在PHP7中,如果你按值迭代一个数组,复制将延迟完成,只有当数组实际被修改时。

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

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

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

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