0

我的模型中有以下逻辑:

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

致命错误:在第 215 行的 /var/www/myapp/application/models/test_model.php 中调用未定义的方法 testclass::showIntAll()

很明显,我正在调用一个不存在的方法,我将解决它。但我的问题是:在创建这个错误时,我可以看到计数器已经增加了......但没有减少,因为一旦抛出这个错误,它就永远不会返回到我的类中的析构函数方法。我将如何针对这些类型的场景进行编程?显然,在生产中,我不会因为 testclass 中缺少方法而出错......但如果我在调用 testclass 构造函数时遇到意外错误,然后它会爆炸,我只是想知道最好的方法是什么是处理这个。

4

2 回答 2

2

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

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

于 2013-01-15T14:25:35.953 回答
1

据我所知,在致命错误上不会调用析构函数

于 2013-01-15T14:24:10.297 回答