2012-04-18 21 views
0

PHP中的正常拋出未捕獲的異常會產生類似這樣的輸出:我可以重新定義PHP顯示未捕獲異常的方式嗎?

 
Fatal error: Uncaught exception 'Exception' with message 'Insufficient permissions or something' in /home/codemonkey/foo/bar/File.php:143 
Stack trace: 
#0 /home/codemonkey/dev/foo/bar/SomeOtherFile.php(85): foo\bar\File::fromUpload(Array) 
#1 /home/codemonkey/dev/foo/bar/OmniDataFileImport.php(35): foo\bar\OmniDataFileImport->performFileImportLogic() 
#2 [internal function]: foo\bar\OmniDataFileImport->post(Object(Request), false) 
#3 /home/codemonkey/dev/foo/vendor/tonic/lib/tonic.php(654): call_user_func_array(Array, Array) 
#4 /home/codemonkey/dev/foo/dispatch.php(22): Resource->exec(Object(Request)) 
#5 {main} 
    thrown in /home/codemonkey/dev/foo/broadnet/files/File.php on line 143 

的消息和堆棧跟蹤是很酷,但我真的想了解更多信息。出於這個原因,我想擴展異常的更多信息,如本地變量和它們的值。問題是,PHP可能仍會輸出相同的上述信息,但是會顯示文本「未捕獲異常MyException」。

我可以覆蓋PHP顯示未捕獲異常的方式嗎?我記得閱讀了PHP中的函數,您可以將其設置爲備份以捕獲所有未捕獲的異常。也許我可以使用該功能來格式化我自己的消息並殺死進程。

感謝的話題

+0

在沒有在每個'throw'站點編寫代碼的情況下,你無法獲得庫存PHP的本地變量;由不在你控制下的代碼拋出的異常也不會有局部變量,並且你沒有辦法做* *。 – Jon 2012-04-18 11:30:22

+0

但我仍然可以用反射做一些很酷的東西... :-) – Hubro 2012-04-18 11:42:46

回答

1

您正在尋找set_exception_handler()所有有用的信息。

但是,你不能檢索局部變量等。PHP的錯誤處理/調試相當差,除非你使用一個不適合生產系統的調試擴展。

+0

這沒問題。因爲我是拋出例外的人,至少我可以標記任何我想要的額外信息並正確顯示。謝謝! – Hubro 2012-04-18 11:31:17

相關問題