Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/241.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 写时拷贝是否可以防止阵列上的数据重复?_Php_Arrays_Duplicates_Copy On Write - Fatal编程技术网

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

Php 写时拷贝是否可以防止阵列上的数据重复?,php,arrays,duplicates,copy-on-write,Php,Arrays,Duplicates,Copy On Write,我正在用PHP编写一个web API客户端,它将CSV数据解析为关联数组,我希望在使用这些数组时保护我的用户不受数据重复的影响 我的用户永远不会向这些数组写入数据(理论上他们可以,但实际上毫无意义) 现在我的问题是。。。如果我的用户将这些数组作为参数传递给方法,PHP的写时复制机制是否会防止数据重复,或者任何不明确接受数组引用的方法是否会收到数组的完整副本?如果不更改它们,数组将不会被复制。顾名思义,写入时复制意味着在写入某些内容之前,不会复制任何变量;只要传递的变量中没有一个字节发生更改,PH

我正在用PHP编写一个web API客户端,它将CSV数据解析为关联数组,我希望在使用这些数组时保护我的用户不受数据重复的影响

我的用户永远不会向这些数组写入数据(理论上他们可以,但实际上毫无意义)


现在我的问题是。。。如果我的用户将这些数组作为参数传递给方法,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)。