0

如果类中没有定义析构函数,如果需要如何调用析构函数?

__destruct() 不是类的默认析构函数。那么如何从类内部调用默认析构函数呢?因此,如果我没有在父类中定义任何 __destruct() 方法,我就不能从子类中调用它。怎么做?

class c1
{
    public $a=10;
    public function f1()
    {
        self::__destruct();//Fatal error: Call to undefined method c1::__destruct()
    }
}

$obj1_c1 = new c1();
$obj1_c1->f1();
4

2 回答 2

3

您可以使用 . 检查该方法是否存在method_exists()

另一个问题是您尝试使用静态调用该方法,self但您需要调用该方法$this::__destruct()。这里有一个例子:

class Test {

    public function foo() {
        if(method_exists($this, '__destruct')) {
            $this->__destruct();
        }
        // if the method does not exist then there is simply no
        // desctructor and therefore nothing to call 
    }
}

$t = new Test();
$t->foo();
于 2013-09-10T09:39:49.230 回答
0

您不调用 destruct 方法。如果要删除它,请取消设置实例。

unset(obj1_c1);

这将调用默认值__destruct

于 2013-09-10T09:41:08.597 回答