浅析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 />';
运行结果:
<?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 />';
运行结果:
相关文章推荐