PHP数组引用替换
我有以下代码PHP数组引用替换,php,Php,我有以下代码 public function index() { $a = 2; $b = 8; $arr[] = $a; $arr[] = &$a; $arr[] = $a; $this->dmp($arr); $arr[1] = $b; $this->dmp($arr); $a++; $b++; $this->dmp($arr); } private functio
public function index() {
$a = 2;
$b = 8;
$arr[] = $a;
$arr[] = &$a;
$arr[] = $a;
$this->dmp($arr);
$arr[1] = $b;
$this->dmp($arr);
$a++;
$b++;
$this->dmp($arr);
}
private function dmp($val) {
echo '<pre>';
var_dump($val);
echo '</pre>';
}
问:为什么索引1上的值没有替换为$b变量的值,但仍然有引用?即使在调用$arr[1]=$b之后,引用仍然存在;如果没有封盖?这里有一个简单的解释:
$arr[1] = $b; // Index 1 references variable $a so $a will become 8
然后指示代码更改索引1引用的变量的值,以保持与$b
相同的值,即8
$arr[0] = 2; // Index 0 holds the value 2
$arr[1] = &$a; // Index 1 holds a reference to variable $a which has a value 9 now
$arr[2] = 2; // Index 2 holds the value 2
如果现在执行var\u dump($a)
,您将看到$a
是8
然后增加$a
和$b
,此时它们的值相同。它们现在都将具有值9
末尾数组的内容与最初指定的内容相同。唯一的区别是,索引为1的元素引用的变量现在具有不同的值
通过引用指定时,会在两者之间创建链接,它们指向相同的结果。因此,当您进行另一个赋值时,它也会赋值给引用的变量。如果您检查
$a
,您将看到它先变为8,然后变为9。要中断引用,请使用unset()
此$arr[]=&$a
表示make$arr[1]
指向与$a
相同的数据
这$arr[1]=$b
表示将$b
的值分配给$arr[1]
,即8,$a
链接到$arr[1]
,因此$a
也是8
检查它被替换,首先是8,然后是9。@u\u mulder是的,但我调用$arr[1]=$b;但是数组中仍然有一个引用。我不是在打$arr[1]=&b;在索引上设置新引用。
echo$a
你会看到的。也许我不能清楚地说明我的问题,因为我的英语不好,但我想知道,为什么在我调用$arr[1]=$b后,数组中索引1上仍然有引用;(这是一个值段,不是一个引用,对吗?)当您分配一个引用时,它会在两者之间创建一个链接,因此当您进行另一个分配时,它也会分配给被引用的变量。这就是为什么我说echo$a
你会看到它变为8,然后变为9。要中断参考,请使用取消设置.thx进行解释。我只是感到困惑,为什么我要调用$arr[1]=$b;数组的索引1不仅仅是$b的值,如果我想继续引用另一个变量,我希望调用$arr[1]=&$b@带索引1的元素只指向变量$a
,因此当您执行$arr[1]=$b
它的基本意思是$a=$b
;当您执行$arr[1]=&$b代码>告诉PHP,索引为1的元素现在指向另一个变量。该索引现在将指向与变量$b
相同的内存位置。如果您不能围绕引用进行思考,请将其视为别名$arr[1]=&$a
表示$arr[1]
是$a
的别名。变量的名称不同,但内存位置相同。thx供您解释。我只是感到困惑,为什么我不需要调用$arr[1]=&$b;要更改引用变量,它不会更改引用变量,$arr[1]
仍然是对$a
的引用。分配$b
时,它只分配$b
的值,即8。
$arr[1] = $b; // Index 1 references variable $a so $a will become 8
$arr[0] = 2; // Index 0 holds the value 2
$arr[1] = &$a; // Index 1 holds a reference to variable $a which has a value 9 now
$arr[2] = 2; // Index 2 holds the value 2