PHP的&引用奇怪结果求解
偶然在开源书籍“TIPI: 深入理解PHP内核”的第六节(写时复制)里看到这样一个例子:
<?php
$a['x']=1;
$b=&$a['x'];
$c=$a;
$c['x']=2;
echo $a['x'];
?>
书里面说本例将输出2,我不信,试了下,在最新的PHP5.4.3上真的输出2!
谁知道这是怎么回事吗?(那书就看了这么一节,不明白$b=&$a['x'];对$a['x']造成了什么影响。)
而且这时var_dump($a);会得到更有趣的结果,它会显示$a['x']是一个引用,就像var_dump($b);时一样。
似乎,&的作用和我想的不一样啊,它不是把$b标为$a['x']的引用,而是把$b和$a['x']指向的数据标为引用(即$a['x']和$b都成了写有1的那块内存的引用)。而当$c=$a后,$c['x']将仍然是一个引用,指向同一个地方,于是我们操作$c['x']影响了$a['x']的值。
不知道我猜对没。
而$c=$a;
$c成为一个数组array("x" => 引用 ),愿天保佑,啊门!