黑马程序员技术交流社区

标题: 一帖搞懂PHP的各种销毁(unset,null,php自释放,析构函数) [打印本页]

作者: huawei    时间: 2016-10-17 15:03
标题: 一帖搞懂PHP的各种销毁(unset,null,php自释放,析构函数)
本帖最后由 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);





精华推荐:

视频集合:众多老学员呐喊:"为什么我选传智PHP"!


作者: 在路上134    时间: 2016-10-30 19:42

作者: tyy    时间: 2016-11-2 11:59
111111111111111111
作者: tyy    时间: 2016-11-2 12:01
111111111111111111
作者: eddies    时间: 2016-11-4 10:19
顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶
作者: 15050187118    时间: 2016-11-11 14:17
测试........
作者: 小小海    时间: 2016-11-15 10:24
rewhfuwqjskqajkws
作者: jason_QS    时间: 2016-11-19 13:43
PHP的各种销毁
作者: lanbao    时间: 2016-11-19 16:49
zhende feifhangnhajd
作者: 夜歌行    时间: 2016-11-20 16:44
fdsaaaaaaaaaaaarrrrrrr
作者: piliyouxia121    时间: 2016-11-28 13:54

作者: 红尘痴儿女    时间: 2016-12-4 14:18
1111111111111111111111111111111
作者: daohaoyi    时间: 2016-12-18 12:57
个人撒发
作者: 肖肖肖    时间: 2016-12-18 22:13
谢谢分享!!!
作者: hp_eckj_luox    时间: 2016-12-19 16:47
一帖搞懂PHP的各种销毁(unset,null,php自释放,析构函数)
作者: sopy_924    时间: 2016-12-20 17:30
php基础的重点了吧
作者: fanphp    时间: 2016-12-26 15:34
谢谢楼主分享
作者: lcy1069    时间: 2016-12-29 15:25
!!!!!!!!!!!!!!!!!!!!!!
作者: VC丶万人敬仰    时间: 2017-1-4 10:26
3121212121212121212121212321321321
作者: PHPjava    时间: 2017-1-20 23:23
的点点滴滴多多多多多多多多多多多多
作者: 1317181388    时间: 2017-2-7 03:56
感谢楼主分享
作者: sunsine    时间: 2017-2-7 13:01
学习一下
作者: 646547989    时间: 2017-2-13 15:46
那以上变量打印出的结果是什么呢
作者: 嘎啦儿    时间: 2017-2-15 14:59
拿出看看答案~~
作者: fjdaslfjk    时间: 2017-2-16 14:44
搞懂PHP销毁(unset,null,php自释放,析构函数)
作者: yu778377806    时间: 2017-2-16 15:53
66666666666666666666
作者: 用户名不得小    时间: 2017-2-17 22:15
phper应该懂得的css中高级知识
作者: 邓燮    时间: 2017-2-17 23:38

111111111111111111
作者: shinehow    时间: 2017-3-3 08:55
啦啦啦啦啦啦啦啦啦啦啦啦
作者: Overflow    时间: 2017-3-12 17:59
11111111111111
作者: alexander_dc    时间: 2017-3-12 20:58
发现看了这些帖子一点也不迷茫了,嘿嘿,phper come on !
作者: alexander_dc    时间: 2017-3-12 21:20
不错的东西
作者: 剑客星辰    时间: 2017-3-31 18:21
2222222222222222
作者: xie~    时间: 2017-5-3 23:33
看看··················

作者: skyly    时间: 2017-5-6 08:44
感谢楼主
作者: 瞬间回忆    时间: 2017-5-24 17:13
一帖搞懂PHP的各种销毁(unset,null,php自释放,析构函数)
作者: 642491653    时间: 2017-6-3 10:52
   一帖搞懂PHP销毁(unset,null,php自释放,析构函数)
作者: thinkJUN    时间: 2017-6-26 14:12
非常感谢
作者: pykpyk    时间: 2017-8-4 23:51
66666666666666666666666666666
作者: sunyangone    时间: 2017-9-4 10:13
一帖搞懂PHP的各种销毁
作者: rules    时间: 2017-9-11 18:44
1111111111
作者: Rakishly    时间: 2017-9-20 17:19
PHP的各种销毁(unset,null,ph
作者: 燕粤    时间: 2017-10-25 11:22
我会好好学习的

作者: wangsinan@123    时间: 2018-3-3 20:45
6666666666666666666666666
作者: yuyongting2001    时间: 2018-7-5 21:05
而且变量名也变为没有定义,可见将变量都彻底删除掉了。
作者: uuuqqq    时间: 2018-10-7 07:43
神啊,终于让我找到了!

作者: 蜗牛泛泛    时间: 2018-10-22 16:27
厉害了 world哥 !
作者: ropang    时间: 2018-11-17 10:34
6666666666666
作者: veteran    时间: 2018-11-19 17:17
echo :'hello world';
作者: bug刘    时间: 2019-1-17 15:32
学习学习




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2