什么时候在php中使用析构函数?
答
它给物体一个准备被杀死的机会。这可能意味着手动清理,状态持久化等。
例如,模型可能想要将其当前所有属性保存回数据库。
或者,数据库对象本身可能想要关闭它用来与数据库服务器通信的套接字。
答
假设我有一个Result
类,它是mysqli_result对象的包装器(实现Iterator,以及其他细节)。当我销毁我的一个Result
对象时,我想确保在mysqli_result
对象上调用free()
方法来回收它正在使用的内存。所以我在我的Result
课的破坏者中这样做。
答
所以,你可能知道什么是构造函数。如果构造函数设置,析构函数会清除。这里有一个来自PHP站点的例子:
<?php
class my_class {
public $error_reporting = false;
function __construct($error_reporting = false) {
$this->error_reporting = $error_reporting;
}
function __destruct() {
if($this->error_reporting === true) $this->show_report();
unset($this->error_reporting);
}
?>
Here's the link到PHP文档的主题。
+0
为什么它甚至需要删除任何东西。如果对象被破坏,引用也会被破坏,并且当没有更多的引用时,它所依赖的对象也不会被引用,所以这些依赖关系的析构函数将被调用。 – Hafiz 2017-11-15 13:01:18
- 它也用于清理:D – Hanseh 2010-04-11 20:03:53
另外,需要注意的是__destruct不仅被调用,而且被删除的对象被调用,而且当对象超出范围时以及脚本结束时 – deadkarma 2010-04-11 20:21:41