A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 huawei 于 2017-3-5 10:54 编辑

   一帖搞懂PHP销毁(unset,null,php自释放,析构函数)



   PHP的变量或对象的销毁如果说一定要分类,那么可以分成两种那就是显式销毁和隐式销毁
     1、显式销毁,当对象没有被引用时就会被销毁,所以我们可以unset或为其赋值NULL;
     2、隐式销毁,PHP是脚本语言,在代码执行完最后一行时,所有申请的内存都要释放掉.


     从上面两种销毁方式中,我们可以总结出销毁的三种方法:那就是1、unset(),2、$varname=null,3、PHP自销毁,我们还要加上一个,那就是4、析构函数__destruct()


     作为小白的我们能搞明白上面四种变量或对象的销毁吗?如果不能搞明白,我们就举出一个例子给大家,方便大家理解。

<?php
class Human {
  public $name = '张三';
  public $gender = null;
  public function __destruct() {
      echo '死了!<br />';
  }
}
$a = new Human();
$b = $c = $d = $a;
unset($a);
$d=null;


echo '<hr />';
var_dump($a);
echo '<hr />';
var_dump($b);
echo '<hr />';
var_dump($c);
echo '<hr />';
var_dump($d);


    那以上变量打印出的结果是什么呢?就是下面这部分:
游客,如果您要查看本帖隐藏内容请回复


     首先我们要知道,在PHP中,变量名是存储在内存栈中,它是指向堆中具体内存的地址,通过变量名查找堆中的内存; 因此我们可以得出结论:


      1、unset()不仅将变量内存释放了,而且变量名也变为没有定义,可见将变量都彻底删除掉了。但如果unset()是在引用传值那就又要注意了,举例:
<?php
        $a = 1;
        $b = &$a;
        unset($a);
        var_dump($a);
        var_dump($b);


游客,如果您要查看本帖隐藏内容请回复



评分

参与人数 1黑马币 +4 收起 理由
一切如初 + 4 山寨

查看全部评分

49 个回复

倒序浏览
您需要登录后才可以回帖 登录 | 加入黑马