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