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();
方法裡抛出異常後,不會調用析構函數:
報了Fatal error,應該程式就中止運作了,就不會再調析構函數了。
解決方法:
調用類方法時加上try catch捕獲異常,使程式更健壯些:
$test = new Test();
try {
$test->test();
} catch(Exception $e) {
echo $e->getMessage() . "
";
}
析構函數也順利運作了。
其實在java中,未做捕獲異常操作的代碼,編譯就會通不過。而php沒有編譯這步,沒人幫你檢查,是以自己平時寫代碼就要注意些,不然有些代碼平時運作正常,遇到異常抛出時,因為未捕獲就導緻整個程式強制退出,那這樣的代碼還是比較不健壯的。