我正在使用PHP编写Web API客户端,将CSV数据解析为关联数组,并且我希望在使用这些数组时保护我的用户免受数据复制.
我的用户永远不会写这些数组(理论上他们可以,但在实践中没有意义).
现在我的问题是……如果我的用户将这些数组作为方法的参数传递,那么PHP的写时复制机制是否会阻止数据复制,或者任何未明确接受对数组的引用的方法都会收到完整的副本阵列?
解决方法:
写入时复制,顾名思义表示在写入内容之前不会复制任何变量;只要在传递的变量中没有改变单个字节,PHP就会自动避免不必要的重复,并且由于这种机制而不需要使用显式引用.
This article详细解释了如何在PHP的源代码中实现,并且如文章所示,使用xdebug可以轻松检查变量是否与xdebug_debug_zval函数不重复.
另外this answer在SO上有更多关于Copy-on-Write.