我的模型中有以下逻辑:
if ( $switch_obj->connect() ) {
if ( $data = $switch_obj->showIntAll() ) {
$switch_obj->disconnect();
return $data;
}
else {
$switch_obj->disconnect();
throw new Exception('Empty Data Set');
}
}
else {
throw new Exception('Connection');
}
这个被调用的switch_obj在它的构造函数和析构函数中都有逻辑,分别用于递增/递减计数器。 (保存在名为testclass的类中)。 因此,每次实例化类型为testclass的对象时,计数器都会增加。然后当被摧毁时,它就会减少。 但是,我刚刚发现了一个我没有处理过的场景。
致命错误:调用未定义的方法testclass :: showIntAll()in 第215行的/var/www/myapp/application/models/test_model.php
很明显,我正在调用一种不存在的方法,我将解决这个方法。但我的问题是:在创建此错误时,我可以看到计数器已经递增...但没有递减,因为一旦抛出此错误,它永远不会返回到我的类中的析构函数方法。 我将如何为这些类型的场景编程?显然,在生产中,由于缺少testclass中的方法,我不会得到错误...但是如果我在调用testclass构造函数时遇到意外错误然后它就会发生炸弹,我只是想知道最好的方法是什么是为了解决这个问题。
答案 0 :(得分:2)
您可能会使用register_shutdown_function取得成就。您的构造函数可以注册一个清理函数,如果发生错误,将会调用该函数。你必须小心不要两次调用清理代码(一次来自析构函数,一次来自这个注册函数。
不是一个漂亮的解决方案,但它可以工作:)
答案 1 :(得分:1)
据我所知,析构函数不会被称为致命错误