2
<?php
$arr = array(1);
$a =& $arr[0];
$arr2 = $arr;
$arr2[0]++;
var_dump($arr);
这部分代码输出2
。 为什么?PHP参考数组元素更改而不触及
我们只碰到arr2
的第一个元素,它没有参考$arr
进行分配。没有别名到相同的数组,所以为什么呢?
<?php
$arr = array(1);
$a =& $arr[0];
$arr2 = $arr;
$arr2[0]++;
var_dump($arr);
这部分代码输出2
。 为什么?PHP参考数组元素更改而不触及
我们只碰到arr2
的第一个元素,它没有参考$arr
进行分配。没有别名到相同的数组,所以为什么呢?
当您将一个阵列分配到下一个阵列时,会进行复制。但是因为$arr[0]
的元素是参考而不是数值,所以制作了参考文献的副本,因此最后$arr[0]
和$arr2[0]
指的是相同的东西。
这是关于引用比数组更多。参考值不会被复制。这也适用于对象。试想一下:
$ageRef = 7;
$mike = new stdClass();
$mike->age = &$ageRef; // create a reference
$mike->fruit = 'apple';
$john = clone $mike; // clone, so $mike and $john are distinct objects
$john->age = 17; // the reference will survive the cloning! This will change $mike
$john->fruit = 'orange'; // only $john is affected, since it's a distinct object
echo $mike->age . " | " . $mike->fruit; // 17 | apple
查看this documentation page也this one第一用户音符。
这很奇怪。似乎并没有创建对'$ arr [0]的引用'也应该将'$ arr [0]'变成引用。我很惊讶,到目前为止我还没有意外地碰到这个问题。 –
由于$ arr2在最后增加1,并且它被分配了$ arr中的内容。我建议print_r($ arr)并在那里查看它。不完全确定你在这方面想要完成什么 – clearshot66