foreach是否始终在PHP中的无引用上创建副本?

时间:2008-10-23 18:21:54

标签: php optimization reference foreach

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

例如,假设getData返回一些数据数组。

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

由于getData()返回的数组只有一个引用,不应该仅仅通过引用使用而不是先复制,或者php没有这个优化吗?

这似乎是一个简单的优化,可以帮助很多编写错误的代码。

1 个答案:

答案 0 :(得分:3)

我不能肯定地说,但是PHP通常使用“copy on write”,所以在你尝试写入它之前,所有内容都是引用,此时会复制并写入副本。