<?php
$arr = array(1);
$a =& $arr[0];
$arr2 = $arr;
$arr2[0]++;
var_dump($arr);
var_dump($a);
var_dump($arr2);
?>
输出:
2
2
2
尽管赋值是按值传递而不是按引用传递,但在$ arr2的增量元素之后更改了$ arr的元素。这在将$ a定义为$ arr [0]后发生。那么,为什么此定义修改了源数组并插入对值的引用而不是初始值?在C ++之后,对我来说似乎不合逻辑。是Bug还是文档功能?我找到了此链接,但在php 5.5手册中找不到解释,在手册中只有这样的事实。
但是请注意,数组内部的引用具有潜在的危险。使用右侧的引用执行普通(不是通过引用)分配不会将左侧变成引用,但是数组内部的引用将保留在这些普通分配中。这也适用于按值传递数组的函数调用。例子:
<?php
/* Assignment of scalar variables */
$a = 1;
$b =& $a;
$c = $b;
$c = 7; //$c is not a reference; no change to $a or $b
/* Assignment of array variables */
$arr = array(1);
$a =& $arr[0]; //$a and $arr[0] are in the same reference set
$arr2 = $arr; //not an assignment-by-reference!
$arr2[0]++;
/* $a == 2, $arr == array(2) */
/* The contents of $arr are changed even though it's not a reference! */
?>
换句话说,数组的引用行为是在逐个元素的基础上定义的;单个元素的引用行为与数组容器的引用状态无关。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句