默认情况下PHP7中的
foreach 在按值进行迭玳时,根据以下条件对数组的副本进行操作:
仅在对数组或值进行更改的情况下它才懒创建副本吗?还是总是创建副本并实质上使引鼡循环实现性能优化?
此外对象数组是否仍然循环/提供对象引用?还是他们实际上还会为 foreach 创建副本并按值返回对象
在PHP 7中,如果您按值迭代数组则只有在实际修改了数组的情况下,复制才会延迟进行
如果如果您通过引用来迭代数组,则将在循环开始时执行分离如果該数组当前在多个地方使用,则这种分离将导致一个副本
此外,通过引用进行迭代意味着a)必须将数组包装为b)每个元素也必须包装在參考中创建引用包装器是一项昂贵的操作,因为它需要分配
按引用进行迭代还需要我们使用修改安全的迭代机制。通过在数组中注册迭代器并在各种数组修改操作中检查可能受影响的迭代器可以实现这一目的。
因此不,通过引用进行迭代当然不是优化这是一个去優化。通常使用引用