浅析php垃圾回收机制

来源:互联网 发布:mysql in exists 区别 编辑:程序博客网 时间:2024/05/21 11:00

示例一:

<?php/***====笔记部分====析构函数: __destruct()构造函数是在对象产生的时候,自动执行析构函数是在对象销毁的时候,自动执行构造函数就是出生时啼哭析构函数就是临终遗言对象如何销毁?1:显式的销毁, unset ,赋值为NULL,都可以2:PHP是脚本语言,在代码执行到最后一行时,所有申请的内存都要释放掉.自然,对象的那段内存也要释放,对象就被销毁了.对于PHP所做的WEB程序,想犯内存泄露的错误也很难.***/class Human {    public $name = null;    public $gender = null;        public function __construct() {        echo '出生了<br />';    }    public function __destruct() {        echo '终究没能逆袭!<br />';    }}$a = new Human();$b = new Human();$c = new Human();$d = new Human();unset($a);$b = true;$c = NULL;echo '<hr />';/*63行也执行完毕,页面执行完毕, $d 得回收,*//***最后一次销毁,是PHP的页面执行完毕了,63行也执行完毕了.然后系统回收, $d此时才销毁,因此 显示hr 即灰线后面***/

运行结果:对象赋值为true,也会销毁对象


示例二:

<?php/// 对象的回收机制 ///class Human {    public $name = '张三';    public $gender = null;        public function __destruct() {        echo '死了!<br />';    }}$a = new Human();$b = $c = $d = $a;echo $a->name,'<br />';echo $b->name,'<br />';$b->name = '李四';echo $a->name,'<br />';echo $b->name,'<br />';unset($a);   // $b,$c,$d在指向对象,因此对象不能销毁.echo '<hr />';/*1:死几次2:死上灰线上,还是死在灰线下*//*在此处,页面运行完毕,对象销毁,执行析构函数.销毁了几个对象? 答:只有一个对象,只死1次死在系统回收时,即页面执行完毕,因此在灰线下.*/
运行结果:


示例三:

<?phpclass Human {    public $name = '张三';    public $gender = null;        public function __destruct() {        echo '死了!<br />';    }}$e = $f = $g = new Human();unset($e);echo 'unset e<br />';unset($f);echo 'unset f<br />';unset($g);echo 'unset g<br />';
运行结果:



0 0
原创粉丝点击