是否有可能知道你是否已经在PHP中处于异常状态?

时间:2011-09-07 23:59:09

标签: php exception-handling

我在__destruct()方法中有一些代码,有时会引发异常。在另一个异常期间调用__destruct()方法,我看到一个模糊的错误:

PHP Fatal error:  Ignoring exception from exampleClass::__destruct() while an exception is already active

隐藏了被调用的实际异常。我想做点什么:

public function __destruct() 
{
  try
  {
    // do work here
  }
  catch(Exception $e)
  {
    // check if we're already in an exception and log it
    if(already_in_exception())
    {
      error_log($e->getMessage());
    }
    // normal destruct, re-throw
    else
    {
      throw $e;
    }
  } 
}

如果PHP 5.1.6兼容,则获得积分!

先谢谢你了!

1 个答案:

答案 0 :(得分:1)

你的问题不是因为你从另一个中抛出异常,而是因为你从析构函数中抛出异常。

来自php.net:http://php.net/manual/en/language.oop5.decon.php我引用:

“注意:尝试从析构函数中抛出异常(在脚本终止时调用)会导致致命错误。”

重新思考你的逻辑,并在解构之前这样做。