PHP Reference Array元素已更改而未触及

时间:2017-08-31 19:23:33

标签: php arrays reference operators

<?php

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

var_dump($arr);

此部分代码输出2。 为什么呢?

我们仅触及arr2的第一个元素,该元素未通过引用$arr来指定。不是同一个数组的别名,为什么会这样?

1 个答案:

答案 0 :(得分: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 page上的第一个用户注释以及this one