0

有没有办法从子类内部调用父类的默认析构函数,这样父类的任何成员都不会对子类的特定实例保持活动状态?

在这种情况下,没有为父类定义析构函数。如果父类的成员变量很多,这可能会用到。那么这个方法会比对每个成员变量使用unset()更有用。

有没有可能的解决方案?

4

2 回答 2

1

当对象最后一次调用时,会自动调用析构函数。

与构造函数一样,父析构函数不会被引擎隐式调用。为了运行父析构函数,必须在析构函数体中显式调用 parent::__destruct()。与构造函数一样,如果子类自己没有实现一个析构函数,它可以继承父类的析构函数。- http://php.net/manual/en/language.oop5.decon.php

因此,您可以从子类而不是构造函数的公共函数 __destructor 调用 parent::__destructor。

于 2013-09-10T10:55:31.053 回答
0

没有__destruct()为主类(也可以称为parent表单扩展类)定义函数,因此,调用parent::__destruct();会产生有效且预期的致命错误:

Fatal error: Call to undefined method c1::__destruct()

您可以使用self::__destruct();$this->__destruct()

如果要将 __destrcut() 添加到父级,请执行以下操作:

class c1
{
    public $a=10;
    public function __construct()
    {
        echo "Called Construct_c1()<br>";
    }
    public function __destruct()
    {
        echo "Called Destruct_c1()<br>";
    }
}

现在可以parent::__destruct();打电话了

于 2013-09-10T10:49:54.940 回答