PHP中如何完全销毁变量和其存在内存中的值。
unset()函数只能销毁变量。
为了更好理解,给个示例
<?php
$a = 1;
$p = &$a;
unset($a);
echo $p; //输出为1
?>如果unset($p)就更不靠谱了,echo $a 仍然为1.有啥办法能将$a完全销毁吗?

解决方案 »

  1.   

    $a = 1;
    $p = &$a;
    unset($a);
    echo $p;
    unset( $p );echo $p;  //输出空
      

  2.   

    刚也自己找到答案了。测试了下,上面几个方法全都可行。
    自己都傻了,连null都想不到了。1,2楼的我倒是没想到这样能行。我以为单个不起作用,合起来也没用-_-
      

  3.   

    只是2楼给的论证比较奇怪啊。。只要unset($p),那么echo $p也是为空。不过事实证明确实销毁内存中的值了。
    我是这么测试得出的<?php
    $a = str_repeat("1",10000);
    $p = &$a;
    $s = memory_get_usage();
    unset($p); //很奇怪,unset($p)和unset($a)颠倒都没关系,不知道php对销毁是具体是怎么处理的
    unset($a); 
    $e = memory_get_usage();
    echo $e-$s;
    ?>
      

  4.   

    刚又研究了下,这下彻底明白了,只有把指向该地址中值的的所有变量全部销毁,那么该地址才会被释放。但如果该地址中值所占内存不是很大的话,unset就只对变量就行销毁,而不释放内存
      

  5.   

    unset 当有传址变量的时候,只是断开$a与内存地址之间的连接, 但内存中的值还存在,因为你的$p变量需要使用这个值.如果不是用unset,直接给$a赋值null的话,那内存就是空的了.
      

  6.   

    解释型语言在释放内存上,没那么简单。 反正页面解释结束了,相应的资源也就被释放了.
    尽量少用数组之类,少New就行了,PHP没有那么多讲究。
      

  7.   

    变量引用跟C中的指针并不相同.
    销毁一个引用变量.只是清除了变量符号表中的名字.
    你上面的例子中  $p,$a,实际上只是指向内部同一个zval结构.销毁$a只是在符号表中去掉了这个指向.
    并不是去掉了zval结构中的内容.所以$p仍然存在.通常的作法是 直接赋值为  null