什么时候在php中使用析构函数?

问题描述:

析构函数的主要用途是什么?什么时候在php中使用析构函数?

你能给我什么样的东西,当一个对象被删除时可能想运行的任何例子?

它给物体一个准备被杀死的机会。这可能意味着手动清理,状态持久化等。

例如,模型可能想要将其当前所有属性保存回数据库。

或者,数据库对象本身可能想要关闭它用来与数据库服务器通信的套接字。

+1

- 它也用于清理:D – Hanseh 2010-04-11 20:03:53

+4

另外,需要注意的是__destruct不仅被调用,而且被删除的对象被调用,而且当对象超出范围时以及脚本结束时 – deadkarma 2010-04-11 20:21:41

假设我有一个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