Php 写时拷贝是否可以防止阵列上的数据重复?
我正在用PHP编写一个web API客户端,它将CSV数据解析为关联数组,我希望在使用这些数组时保护我的用户不受数据重复的影响 我的用户永远不会向这些数组写入数据(理论上他们可以,但实际上毫无意义)Php 写时拷贝是否可以防止阵列上的数据重复?,php,arrays,duplicates,copy-on-write,Php,Arrays,Duplicates,Copy On Write,我正在用PHP编写一个web API客户端,它将CSV数据解析为关联数组,我希望在使用这些数组时保护我的用户不受数据重复的影响 我的用户永远不会向这些数组写入数据(理论上他们可以,但实际上毫无意义) 现在我的问题是。。。如果我的用户将这些数组作为参数传递给方法,PHP的写时复制机制是否会防止数据重复,或者任何不明确接受数组引用的方法是否会收到数组的完整副本?如果不更改它们,数组将不会被复制。顾名思义,写入时复制意味着在写入某些内容之前,不会复制任何变量;只要传递的变量中没有一个字节发生更改,PH
现在我的问题是。。。如果我的用户将这些数组作为参数传递给方法,PHP的写时复制机制是否会防止数据重复,或者任何不明确接受数组引用的方法是否会收到数组的完整副本?如果不更改它们,数组将不会被复制。顾名思义,写入时复制意味着在写入某些内容之前,不会复制任何变量;只要传递的变量中没有一个字节发生更改,PHP就会自动避免不必要的重复,并且由于这种机制,不需要使用显式引用 详细解释了如何在PHP的源代码中实现这一点,正如本文所建议的,使用xdebug可以轻松地检查变量是否与函数xdebug_debug_zval重复
此外,这里还有更多关于书面抄写的内容。感谢您的及时回复,如果您有时间,我将非常感谢您对这件事做更多的阐述。接收数组是否使用指针?或者你可以提供一个链接到更多的信息来证实你的答案吗?我还有一个问题。如果您说:
$a=array(…)$b=一美元$b[4000]。=“x”
整个数组会被复制还是只复制索引为4000的一个元素?所以回答我自己的问题,整个数组不会只复制一个索引,你可以在代码中看到这一点:php-r'$a=str_repeat(“a”,1024*1024*1024)$b=重复序列(“b”,1024*1024*1024)$a=阵列($a,$b)$b=一美元$b[1]。=“x”;回显“完成\n”;睡眠(1000000);'代码>当它处于睡眠状态时,您可以使用您喜爱的系统监视器检查它是否只使用3GB的ram(如果整个阵列都被复制,则为4)。