2017-08-31 43 views
2
<?php 

$arr = array(1); 
$a =& $arr[0]; 
$arr2 = $arr; 
$arr2[0]++; 

var_dump($arr); 

这部分代码输出2。 为什么?PHP参考数组元素更改而不触及

我们只碰到arr2的第一个元素,它没有参考$arr进行分配。没有别名到相同的数组,所以为什么呢?

+0

由于$ arr2在最后增加1,并且它被分配了$ arr中的内容。我建议print_r($ arr)并在那里查看它。不完全确定你在这方面想要完成什么 – clearshot66

回答

2

当您将一个阵列分配到下一个阵列时,会进行复制。但是因为$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 pagethis one第一用户音符。

+0

这很奇怪。似乎并没有创建对'$ arr [0]的引用'也应该将'$ arr [0]'变成引用。我很惊讶,到目前为止我还没有意外地碰到这个问题。 –