background image

 
从结果上看出,

$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) } 

 

 

下边我们再来看看如果引用数组中的元素,会有什么异常。