析构函数 __destruct()
构造函数是在对象产生的时候,自动执行
析构函数是在对象销毁的时候,自动执行
对象是如何销毁?
1.显式的销毁,unset,赋值为NULL,或false都可以
2.PHP是脚本语言,在代码执行到最后一行时,
所有申请的内存都要释放。
所以,对象的那段内存也要释放,对象也就被销毁了。
对于PHP所做的WEB程序,想犯内存泄漏的错误也很难。
<?php
class Human {
public $name = null;
public $gender = null;
public function __construct(){
echo "born <br/>";
}
public function __destruct(){
echo "die 终究没能逆袭 <br/>";
}
}
$a = new Human();
$b = new Human();
$c = new Human();
$d = new Human();
unset($a);
$b = false;
$c = NULL;
echo '<hr/>';
/*
最后一次销毁,是PHP执行完毕了,
然后系统回收,$d此时才销毁
因此,显示在 hr,灰线后面。
*/
回收机制
1.把对象赋值为其他值,比如true,对象会不会销毁?
也会销毁,对象的回收机制。
2.为什么,最后一个销毁会出现在灰线下?
最后一次销毁,是PHP执行完毕了,
然后系统回收,$d此时才销毁
因此,显示在 hr,灰线后面。
<?php
class Human {
public $name = 'iwen';
public $gender = null;
public function __destruct(){
echo "die 终究没能逆袭 <br/>";
}
}
$a = new Human();
$b = $c = $d = $a;
echo $a->name,"<br/>";
echo $b->name,"<br/>";
$b->name = 'ime';
echo $a->name,"<br/>";
echo $b->name,"<br/>";
unset($a); //$b,$c,$d在指向对象,因此对象不能被销毁。
echo "<hr/>";
/*
1.死几次?
答:1次
2.死在灰线上,下个几次?
答:灰线下,1次,死在系统回收时。
*/