class Test{}
$a = new Test();
$b = $a;
$c = &$a;$a = null;
var_dump($a);echo '<br>';
var_dump($b);echo '<br>';
var_dump($c);echo '<br>';
结果为   ---------------------------unset($a);
var_dump($a);echo '<br>';
var_dump($b);echo '<br>';
var_dump($c);echo '<br>';
结果为  

解决方案 »

  1.   

    unset是把$a指向null,并不改变员原来的存储内容,所以c对a的引用型仍然为原来a的内容,把a置null是对a的存储内容作了赋值操作
      

  2.   

    第一种情况
    $a = null; 是把$a的内容改为null,而$c是$a的引用,所有$c的值也是null第二种情况
    unset($a); 只是把$a的变量释放,表示$a这个变量不存在了。
    $c是$a的引用,读取的是$a内存地址的内容,而这个内容在unset之后是不会改变的,所以还是有值。形象点的解释
    $a 指向内存地址1234
    $c是$a的引用,也是指向内存地址1234第一种情况 
    $a =null 就是把内存地址1234内的值改为null ,所以$a与$c都是null第二种情况
    unset($a); 是把$a不再指向内存地址1234,但是内存地址1234内的值还是之前的值,$c还是指向内存地址1234,所以$c的值还是不变。