有没有办法从子类内部调用父类的默认析构函数,这样父类的任何成员都不会对子类的特定实例保持活动状态?
在这种情况下,没有为父类定义析构函数。如果父类的成员变量很多,这可能会用到。那么这个方法会比对每个成员变量使用unset()更有用。
有没有可能的解决方案?
当对象最后一次调用时,会自动调用析构函数。
与构造函数一样,父析构函数不会被引擎隐式调用。为了运行父析构函数,必须在析构函数体中显式调用 parent::__destruct()。与构造函数一样,如果子类自己没有实现一个析构函数,它可以继承父类的析构函数。- http://php.net/manual/en/language.oop5.decon.php
因此,您可以从子类而不是构造函数的公共函数 __destructor 调用 parent::__destructor。
没有__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();
打电话了