PHP 魔术方法 - 析构函数 __destruct()
__destruct()
是 PHP 面向对象编程的另一个重要的魔法函数,该函数会在类的一个对象被删除时自动调用。
我们可以在该函数中添加一些释放资源的操作,比如关闭文件、关闭数据库链接、清空一个结果集等
其实,__destruct()
在日常的编码中并不常见,因为它是非必须的,是类的可选组成部分。通常只是用来完成对象被删除时的清理动作而已。
而 PHP 的特性 「 运行完一次请求则销毁环境 」 的做法,也没必要使用 __destruct()
。反正执行完请求后所有该销毁的都会销毁。
调用时机
当销毁一个对象时才会调用对象的析构函数,一般情况下,销毁一个对象的触发时机为
- 主动调用
unset( $obj )
- 主动调用
$obj = NULL
- 程序自动结束
函数原型
__destruct()
的声明格式类似于构造函数 __construct
, 该名字是固定的,以两个下划线开头,然后跟上 destruct
关键字
该函数没有任何参数,也不需要更不要返回任何值
该函数的原型如下
function __destruct() { // 其它代码 }
范例
下面的代码,我们给 Person
类添加上析构函数 __destruct()
,该函数只是一个提示,没有任何实际意义
<?php class Person{ public $name; public $age; public $sex; public function __construct($name="", $sex="Male", $age=22) { $this->name = $name; $this->sex = $sex; $this->age = $age; } /** * say method */ public function say() { echo "Name:".$this->name.",Sex:".$this->sex.",Age:".$this->age; } /** * 声明一个析构函数 */ public function __destruct() { echo "再见,请记住我的名字:".$this->name . "\n"; } } $person = new Person("Yufei"); // 销毁刚刚创建的对象 unset($person); $person_hero = new Person('Hero'); // 销毁刚刚创建的对象 $person_hero = null; $peson_libai = new Person('Libai'); // 程序结束会自动调用析构函数
运行结果如下
[yufei@localhost php]$ php demo.php 再见,请记住我的名字:Yufei 再见,请记住我的名字:Hero 再见,请记住我的名字:Libai