一尘不染

写时复制是否可以防止阵列上的数据重复?

php

我正在用PHP编程一个Web API客户端,该客户端将CSV数据解析为关联数组,并且在使用这些数组时,我想保护我的用户免受数据重复。

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

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


阅读 273

收藏
2020-05-29

共1个答案

一尘不染

顾名思义,写时复制意味着在写入某些内容之前不会复制任何变量。只要在传递的变量中未更改单个字节,PHP就会自动避免不必要的重复,并且由于这种机制而无需使用显式引用。

本文详细说明了如何在PHP源代码中实现此功能,并且如本文所建议,使用xdebug可以轻松地检查变量是否与xdebug_debug_zval函数重复。

2020-05-29