$data='2010';
$data1=$data;
$data=NULL;
echo $data.'-'.$data1;输出 -2010$data='2010';
$data1=&$data;
$data=NULL;
echo $data.'-'.$data1;
输出 -$data='2010';
$data1=$data;
unset($data);
echo $data.'-'.$data1;输出 -2010$data='2010';
$data1=&$data;
unset($data);
echo $data.'-'.$data1;
输出 -2010
谁能给详细解释一下  2个问题 
第一个 unset和  变量=NULL的区别 
第二个 地址传递 和 普通赋值 的区别
他们占用内存的区别 和  如何释放内存的  哪位高手理解的透彻好好讲讲    

解决方案 »

  1.   

    1) unset是销毁变量,就说这个变量不存在了。变量=NULL只是一个赋值操作,变量仍然存在。
    2) 第二个问题是基本概念了,学过C/C++的都应该知道这两者的区别。PHP中很少考虑内存释放,因为当PHP脚本执行结束之后,PHP解释器会自动释放内存。
      

  2.   

    你所说的“地址传递”,在 PHP 的手册里叫做“Assign By Reference”,相当于创建了一个变量别名,用两个变量访问“同一个值”。比如 $a=&$b 之后,$a 就成了 $b 的“别名”,所有可以使用 $b 的地方,都可以使用 $a,只有一个例外,就是 unset()。对于一个普通变量,unset($b) 跟 $b=NULL 的效果是一样的,也就是把变量置为“未赋值”状态。而对于“引用变量”,就是上面说的“别名”,unset($a) 是切断引用关系,$a 成为一个“未赋值的普通变量”, $b 则保持原值;而 $a=NULL 则是把值置为 NULL,相当于 $a 和 $b 都成为“未赋值的变量”,而 $a 与 $b 的别名关系依然保持。■□■□■□■□■□■□■□■
    □             □
    ■  忍以明志 勤以致远  ■
    □             □
    ■□■□■□■□■□■□■□■
    基于CSDN论坛提供的插件扩展功能,自己做了个签名档工具,分享给大家,欢迎技术交流 :)
      

  3.   

    1) unset是销毁变量,就说这个变量不存在了。变量=NULL只是一个赋值操作,变量仍然存在。
    2) ($data1=&$data)&符号,我理解为是引用那个变量,除非被引用的变量被销毁(unset)不存在了,否则$data1在任何地方都等于data。