Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/267.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_Reference_Copy - Fatal编程技术网

PHP数组复制语义:当成员是引用时,它会做什么,在哪里记录?

PHP数组复制语义:当成员是引用时,它会做什么,在哪里记录?,php,arrays,reference,copy,Php,Arrays,Reference,Copy,此代码 <?php $a = 10; $arr1 = array(&$a); $arr1[0] = 20; echo $a; echo "\n"; $arr2 = $arr1; $arr2[0] = 30; echo $a; 显然,引用数组成员是“保留的”,例如,这可能导致一些有趣/奇怪的行为,如 <?php function f($arr) { $arr[0] = 20; } $val = 10; $a = array(&$val); f($

此代码

<?php

$a = 10;
$arr1 = array(&$a);

$arr1[0] = 20;
echo $a; echo "\n";

$arr2 = $arr1;
$arr2[0] = 30;

echo $a;
显然,引用数组成员是“保留的”,例如,这可能导致一些有趣/奇怪的行为,如

<?php

function f($arr) {
    $arr[0] = 20;
}

$val = 10;
$a = array(&$val);

f($a);

echo $a[0];

?>
我的问题是:它是用来做什么的,在哪里有文档记录(除了用户在上的评论)以及Zend引擎源代码本身?
PHP的引用赋值行为记录在。您也可以在这里找到一段关于数组值引用的内容,开头是:

虽然不是严格意义上的按引用赋值,但使用语言construct array()创建的表达式也可以通过在要添加的数组元素前加前缀&来实现

该页面还解释了为什么第一个代码的行为与之类似:

但是,请注意,数组中的引用具有潜在危险。使用右侧的引用执行普通(非引用)赋值不会将左侧变为引用,但数组中的引用会保留在这些普通赋值中。这也适用于按值传递数组的函数调用


这应该也在
数组
的页面上:)@mlvljr:如果你这么认为,你可以提交一个文档错误:@nikic Posiibly,无论如何,我在
数组
页面上留了一个便条。
<?php

function f($arr) {
    $arr[0] = 20;
}

$val = 10;
$a = array(&$val);

f($a);

echo $a[0];

?>
20