gpt4 book ai didi

php - 进入 “fatal error”时未调用对象析构函数

转载 作者:行者123 更新时间:2023-12-03 08:08:07 25 4
gpt4 key购买 nike

我在模型中具有以下逻辑:

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类型的对象时,都会增加一个计数器。然后在销毁时递减。
但是,我刚刚发现了一个我没有处理的场景。

Fatal error: Call to undefined method testclass::showIntAll() in /var/www/myapp/application/models/test_model.php on line 215



很明显,我正在调用一个不存在的方法,该方法将解决。但是我的问题是这样的:在创建此错误时,我可以看到计数器已经增加了……但没有减少,因为一旦抛出此错误,它就永远不会返回我类中的析构函数方法。
我将如何为这些类型的方案编程?显然,在生产中,由于testclass中缺少方法,我不会得到任何错误...但是万一在调用testclass构造函数然后炸弹的情况下出现意外错误,我只是想知道什么是最佳方法是要处理这个。

最佳答案

您可以使用register_shutdown_function实现某些目标。您的构造函数可以注册一个清理函数,如果发生错误,该函数将被调用。您必须注意不要两次调用清除代码(一次是从析构函数调用,一次是从此注册函数调用)。

不是一个漂亮的解决方案,但它可以工作:)

关于php - 进入 “fatal error”时未调用对象析构函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14339657/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com