Exception会终止程序吗?

时间:2015-02-17 22:28:12

标签: php exception

考虑以下代码,由cron运行:

try {
    $count = $stmt->execute ( $queryArray );
}
catch ( PDOException $ex ) {
    fwrite ( $fp, '  "exception" at line: ' . (__LINE__ - 3). ",  " . $ex -> getMessage () . "\n" );
    throw new RuntimeException (
         basename (__FILE__) . '::' . __METHOD__ . ' - Execute query failed: ' . $ex -> getMessage ()  );
}

是否throw new RuntimeException重新投掷导致程序停止?换句话说,catch& fwrite语句足以“捕获”异常并允许程序继续?

throw文档含糊不清。唯一的参考是来自(link to) PHP ExceptionsPHP Fatal Error

  

当抛出异常时,语句后面的代码将不会被执行,PHP将尝试查找第一个匹配的catch块。如果未捕获异常,则将发出带有“Uncaught Exception ...”消息的PHP致命错误,除非已使用set_exception_handler()定义了处理程序。

1 个答案:

答案 0 :(得分:0)

  

是否通过抛出新的RuntimeException重新抛出导致程序停止?

是的,因为根据文档,没有匹配的捕获。为了继续执行,您需要使用嵌套catchRuntimeException第二个例外(try/catch),这通常不是一个好主意:

try {
   // something with PDO that generates an exception
} catch (PDOException $e) {
   // do some stuff
   try {
       throw new RuntimeException();
   } catch (RuntimeException()) {
     // do something else
   }
}
  

换句话说,捕获与否足够的fwrite声明' catch'例外并允许程序继续?

如果您想继续该程序,那么您将不需要抛出第二个异常。但是,在发生异常之前发生的任何事情都会发生。因此,在您的示例中,fwrite仍然会发生,只有在遇到RuntimeException时程序才会停止。