PHP-析构函数及浅谈垃圾回收机制
说明
PHP中的析构函数及浅谈垃圾回收机制
函数详解
函数介绍
void __destruct ( void )
PHP 5 引入了析构函数的概念,这类似于其它面向对象的语言,如 C++。析构函数会在到某个对象的所有引用都被删除或者当对象被显式销毁时执行。
显式销毁的示例:
1、使用unset(对象名),将对象名销毁(此对象没有其他对象指向同一个空间 ps:1)
2、$对象名 = null
3、$对象名 = 'abc'
ps:1 这种情况就不会触发析构函数
$diandian=new Dog('点点','泰迪');//创建点点小狗对象
$doudou=$diandian;
$diandian->name="是";
unset($diandian);
隐式销毁:
所谓的隐式销毁,就是由系统本身销毁。在程序执行完毕后,程序里的对象就会被系统销毁,这个系统销毁或隐式销毁。
析构函数示例
<?php
class MyDestructableClass {
function __construct() {
print "In constructor\n";
$this->name = "MyDestructableClass";
}
function __destruct() {
print "Destroying " . $this->name . "\n";
}
}
$obj = new MyDestructableClass();
?>
1.和构造函数一样,父类的析构函数不会被引擎暗中调用。
2.要执行父类的析构函数,必须在子类的析构函数体中显式调用 parent::__destruct()。此外也和构造函数一样,子类如果自己没有定义析构函数则会继承父类的。
3.析构函数即使在使用 exit() 终止脚本运行时也会被调用。在析构函数中调用 exit() 将会中止其余关闭操作的运行。
4.试图在析构函数(在脚本终止时被调用)中抛出一个异常会导致致命错误
析构函数总结
1.当没有变量指向对象时,这个对象就会被回收
2.在销毁对象之前,析构函数会被调用
3.析构函数并不是用来销毁对象本身,而是在对象销毁前给程序员一个机会,可以让程序员来回收这个对象创建的资源。
4.关于在析构函数中释放资源的问题,如果我们对效率没有很高很特殊的要求,完全可以不使用析构函数,因为在程序执行完,PHP的垃圾回收机制会自动帮我们处理。
垃圾回收机制
1.在PHP中,当一个对象没有任何引用指向它的时候,他就会成为一个垃圾对象,PHP就会通过垃圾回收机制将对象销毁。
2.当程序执行完退出时,PHP也将启用垃圾回收机制,销毁对象。
资料:
在线文档:[垃圾回收机制][1]
其他博文: https://www.cnblogs.com/taijun/p/4206770.html
结尾
腹有诗书气自华,最是书香能致远。