<?php function &test(){ static $b = 1; $b += 2; return $b; } $a = &test(); $a =8; $c = test(); echo $c; exit;
$a=test()方式调用函数,只是将函数的值赋给$a而已,
而$a做任何改变都不会影响到函数中的$b而通过$a=&test()方式调用函数呢,
他的作用是将return $b中的$b变量的内存地址与$a变量的内存地址指向了同一个地方,
即产生了相当于这样的效果($a=&b;)
所以改变$a的值也同时改变了$b的值所以在执行了 $a=&test(); $a=8; 以后,$c的值变为了10
class a{ var $abc="ABC"; } $b=new a; $c=$b; echo $b->abc; //这里输出ABC echo $c->abc; //这里输出ABC $b->abc="DEF"; echo $c->abc; //这里输出DEF
以上代码是在PHP5中的运行效果,在PHP5中对象的复制是通过引用来实现的。
上列中$b=new a; $c=$b; 其实等效于$b=new a; $c=&$b;
PHP5中默认就是通过引用来调用对象,但有时你可能想建立一个对象的副本,
并希望原来的对象的改变不影响到副本 .
为了这样的目的,PHP定义了一个特殊的方法,称为__clone。