如果您的代碼命名空間,catch塊應參考\Exception
- 用反斜槓 - 如果沒有反斜線那麼PHP將尋找Exception
在當前的命名空間。這通常會失敗,未捕獲的異常將傳遞給Xdebug。
下面的代碼將異常的Xdebug:
namespace foo;
try {
new \PDO(0);
} catch (\Exception $e) {
echo "Caught!";
}
// Exception caught correctly
手動拋出異常可能是:
namespace foo;
try {
new \PDO(0);
} catch (Exception $e) {
echo "Caught!";
}
// Fatal error: Uncaught exception...
添加一個反斜槓異常會尋找(並找到)Exception
在全局命名空間之前混亂(這就是爲什麼我使用上面的PDO)。如果我們試圖從當前的命名空間拋出一個異常,PHP告訴我們異常不存在有:
namespace foo;
try {
throw new Exception();
} catch (Exception $e) {
echo "Caught!";
}
// Fatal error: Class 'foo\Exception' not found
拋出一個全局異常,而不在catch塊一個全球性的參考文獻沒有不同:
namespace foo;
try {
throw new \Exception(); // global Exception
} catch (Exception $e) {
echo "Caught!";
}
// Fatal error: Uncaught exception 'Exception' in...
鑑於所有這些,總是在catch的Exception
前加反斜槓是個好主意。
namespace foo;
try {
throw new \Exception();
} catch (\Exception $e) {
echo "Caught!";
}
// Exception caught correctly
我同意這與xdebug.show_exception_trace有關。我認爲,如果設置爲0,它應該忽略捕獲的異常,但即使明確禁用它,也不行。 – nuqqsa 2010-05-25 12:06:28
在#php.pecl @ EFNet上與Derick交談,或者使用http://bugs.xdebug.org/ – Artefacto 2010-05-25 12:48:57
上的錯誤跟蹤器。這最後一條評論讓你的答案完整:)我絕對會報告這個錯誤,以防我可以仍然在2.1.0RCx中重現它。謝謝。 – nuqqsa 2010-05-28 11:36:58