我覺得這有點奇怪。PHP 5.3異常完整性檢查 - PHP真的打印內部異常信息嗎?
我正在運行一個腳本,它運行一個程序。我將最新的輸出存儲在一個變量中。如果程序或腳本出於不同的原因在腳本中導致異常,我會捕獲異常,追加錯誤日誌並重新拋出它。上面的幾個級別我再次捕捉它,記錄總的消息,並重新推出它關閉腳本。
當PHP命令行終止時,它似乎只打印堆棧跟蹤中的內部異常消息,因爲沒有提及我的消息。它甚至說Uncaught「Exception」是我在測試時拋出的內部異常,而外部異常是自定義類型。 getMessage()按預期返回完整的消息。
PHP Fatal error: Uncaught exception 'Exception' with message 'This is a test error message.' in /home/x/Documents/project/file.php:14
堆棧跟蹤:
難道我瘋了,這是預期的行爲?我應該去睡覺嗎?
UPDATE:
在 「根」 級我有這樣的:
catch(Exception $e)
{
$access->logError($e->getMessage());
print 'Actual error: ' . $e->getMessage() . "\n";
print get_class($e);
throw $e;
}
打印語句打印真正的消息,我期待,聚集。扔$Ë產生的內部異常的消息...... print get_class($e)
打印CustomException ...
這是CustomException聲明:
class CustomException extends Exception
{
function __construct($message, $prev)
{
parent::__construct($message, -1, $prev);
}
}
這是如何使用它:
catch(Exception $e)
{
$message = $e->getMessage() . $logString;
$resultReporter->reportError($message);
$e = new CommandException($message, $e);
$throw e;
}
你確定你確實在捕捉內部異常嗎?也許是一個愚蠢的問題,但它可能只是它實際上是內部處理的唯一例外。 – 2011-06-01 08:21:25
@rudi這是一個很好的問題,請參閱我的更新。我期待着發現我犯了一些錯誤... – Max 2011-06-01 08:27:43
剛看了你的更新,我有點困惑。你說你的外部異常是不同的類型,但你拋出原來的'Exception'?我想我可能錯過了一些東西!或者你根本不會在第一個地方拋出一個外部異常(這是你的代碼所暗示的)。 – 2011-06-01 08:34:07