foreach
在PHP7中,默认情况下,按值迭代时,根据以下内容对数组的副本进行操作:http://php.net/manual/en/migration70.incompatible.php
是否只有在对数组或值进行更改时才会懒惰地创建副本,或者它是否总是复制并实质上使引用循环进行性能优化?
此外,对象数组是否仍然循环/给你对象的引用?或者他们实际上是否也会创建副本foreach
并按值返回对象?
在PHP 7中,如果按值迭代数组,则只有当数组实际被修改时才会延迟复制.
如果通过引用迭代数组,则将在循环开始时执行分隔.如果阵列当前在多个位置使用,则此分离将导致复制.
此外,通过引用进行迭代意味着a)数组必须被包装到引用中,并且b)每个元素也必须被包装在引用中.创建引用包装器是一项昂贵的操作,因为它需要分配.
另外,通过引用迭代要求我们使用修改安全的迭代机制.这是通过向数组注册迭代器并在各种数组修改操作中检查可能受影响的迭代器来实现的.
所以不,通过引用迭代肯定不是优化,它是一种去优化.通常使用引用.