foreach总是在PHP中的none引用上创建一个副本吗


Does foreach always create a copy on a none reference in PHP?

我想知道PHP是否内置了这种优化。通常,当你在不使用引用的情况下调用foreach时,它会复制传递的数组并对其进行操作。如果对该数组的引用计数只有1,会发生什么?

例如,假设getData返回某个数据数组。

foreach(getData() as $data)
    echo $data;

既然getData()返回的数组只有一个引用,难道不应该只通过引用使用而不首先复制它吗?或者php没有这个优化吗?

这看起来像是一个简单的优化,可以帮助很多写得不好的代码。

我不能肯定,但PHP通常使用"写时复制",所以在您尝试写入之前,所有内容都是一个引用,此时会生成一个副本并写入该副本。