天天看点

php父类析构函数,php析构函数疑惑

class Test {

public function __construct() {

echo "__construct

";

}

public function test() {

echo "in test()

";

throw new Exception("error", 500); // 抛出异常

}

public function __destruct() {

echo "__destruct

";

}

}

$test = new Test();

$test->test();

方法里抛出异常后,不会调用析构函数:

php父类析构函数,php析构函数疑惑

报了Fatal error,应该程序就中止运行了,就不会再调析构函数了。

解决方法:

调用类方法时加上try catch捕获异常,使程序更健壮些:

$test = new Test();

try {

$test->test();

} catch(Exception $e) {

echo $e->getMessage() . "

";

}

php父类析构函数,php析构函数疑惑

析构函数也顺利运行了。

其实在java中,未做捕获异常操作的代码,编译就会通不过。而php没有编译这步,没人帮你检查,所以自己平时写代码就要注意些,不然有些代码平时运行正常,遇到异常抛出时,因为未捕获就导致整个程序强制退出,那这样的代码还是比较不健壮的。