从结果上看出,
$x
保持不变,只是
$z
被改变成了对
$y
的引用。相当于先 unset 了
$z
变量然
后赋予了新值。
代码如下:
$z
= &
$x
;
unset(
$z
);
$z
= &
$y
;
“
这其实是比较合理逻辑,就比如下边的代码,我们并不是得到类似于 指向指针的指针
(Pointer point to a Pointer)”
“
那样的 引用引用的引用(Reference refer to a Referenece)”,只是
多个引用到同一块内容的引用变量。
代码如下:
$x
= 21;
$y
= &
$x
;
$z
= &
$y
引用数组元素会让该元素变成引用类型
对于变量上取引用,并不会造成原变量类型的改变,但是如果取的是数组中的元素,却
会让该元素也变成引用类型。
在看问题代码前,首先要指出的是:
Array assignment always involves value copying. Use the reference operator to
copy
an
array
by
reference.
也就是说 PHP 的数组赋值是
copy
而非引用,赋值过程会创建新的数组赋予被赋值的变量。
在新变量上的数组操作并不会影响到原数组变量中的内容。
代码如下:
$a
=
array
(21, 7);
$b
=
$a
;
$b
[0] = 7;
var_dump(
$a
);
echo
'<br/>';
var_dump(
$b
);
//Output:
//array(2) { [0]=> int(21) [1]=> int(7) }
//array(2) { [0]=> int(7) [1]=> int(7) }
下边我们再来看看如果引用数组中的元素,会有什么异常。