您的位置:首页 > 编程语言 > PHP开发

浅析php垃圾回收机制

2014-12-06 23:00 567 查看
示例一:

<?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次
死在系统回收时,即页面执行完毕,因此在灰线下.
*/

运行结果:



示例三:

<?php
class 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 />';
运行结果:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: