11

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

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

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

4

2 回答 2

14

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

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

此外,这里关于 SO 的答案有更多关于 Copy-on-Write 的内容。

于 2012-06-17T22:18:52.617 回答
2

如果您不更改它们,则不会复制数组。

于 2012-06-17T21:35:43.027 回答