考虑到以下代码,由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
文件含糊不清。唯一的参考是(链接到)PHP Exceptions:中的PHP Fatal Error
当抛出异常时,语句后面的代码将不会执行,PHP将尝试查找第一个匹配的catch块。如果没有捕捉到异常,则会发出PHP致命错误,并显示"Uncaught exception…"消息,除非使用set_exception_handler()定义了处理程序。
通过抛出重新抛出新的RuntimeException是否导致程序停止?
是的,因为根据文档,没有匹配的捕获。为了继续执行,您需要使用嵌套的try/catch
来catch
第二个异常(RuntimeException
),这通常不是一个好主意:
try {
// something with PDO that generates an exception
} catch (PDOException $e) {
// do some stuff
try {
throw new RuntimeException();
} catch (RuntimeException()) {
// do something else
}
}
换句话说,catch&fwrite语句是否足够"捕获"异常并允许程序继续?
如果你想继续这个程序,那么你就不需要抛出第二个异常。但是,在抛出该异常之前发生的任何事情都会发生。因此,在您的示例中,fwrite
仍然会发生,当遇到RuntimeException
时,程序将停止。