写时复制会阻止数组上的数据重复吗?

thw*_*hwd 9 php arrays duplicates copy-on-write

我正在使用PHP编写Web API客户端,将CSV数据解析为关联数组,并且我希望在使用这些数组时保护我的用户免受数据复制.

我的用户永远不会写这些数组(理论上他们可以,但在实践中没有意义).

现在我的问题是......如果我的用户将这些数组作为方法的参数传递,那么PHP的写时复制机制是否会阻止数据复制,或者任何未明确接受对数组的引用的方法都会收到完整的副本阵列?

Mah*_*ahn 13

写入时复制,顾名思义表示在写入内容之前不会复制任何变量; 只要在传递的变量中没有改变单个字节,PHP就会自动避免不必要的重复,并且由于这种机制而不需要使用显式引用.

本文详细解释了如何在PHP的源代码中实现,并且正如文章所建议的那样,使用xdebug可以轻松检查变量是否与xdebug_debug_zval函数不重复.

此外,这里关于SO的答案在Copy-on-Write上有更多.