在java程式設計語言中,有一套比較完善的異常處理機制,而且內部已經封裝的比較好了。php中的異常處理機制卻沒有那麼強大和完善,那它是如何?的呢,是把每個異常當成錯誤來處理的嗎?
回複內容:
在java程式設計語言中,有一套比較完善的異常處理機制,而且內部已經封裝的比較好了。php中的異常處理機制卻沒有那麼強大和完善,那它是如何?的呢,是把每個異常當成錯誤來處理的嗎?
PHP 內建了一個基類 Exception,你需要繼承這個類來定義自己的異常。
當異常被觸發時通過 catch 關鍵字來捕獲,進行異常處理。
catch (MyException $e) { //MyException process here...}
拋出異常可以這樣做:
$myException = new MyException(/*something here*/);throw $myException;
關於前段時間,自己提到的一個php中的異常處理機制問題,由於回答者甚少,筆者只好自己廣搜網路資源以及大拿的文章(尤其參考PHP核心技術與最佳實務一書),現整理如下,如有錯誤,歡迎指出:
在各種語言中,異常和錯誤的概念其實是不一樣的,在PHP中,任何自身錯誤都會觸發一個錯誤,而不是拋出異常(對於一些情況,會同時拋出異常和錯誤!)。在這個意義上,如果像使用異常一樣去處理一些不可預知的情況,是辦不到的。比如,想在資料庫連接打不開時觸發異常,是不可行的,這在PHP中把他作為錯誤拋出,而不會作為異常自動捕獲。
經典除零問題:
try {$a = 5 / 0;echo $a;} catch (Exception $e) {echo $e->getMessage();$a = 123;}echo $a;
輸出結果是:
PHP只有你手動throw拋出異常後,才能捕獲異常(一般是這樣,但也有php異常可以自動捕獲)。
而對於java,它有比較完善的異常處理機制,把一切認為不正常的情況都當作了異常,而PHP卻把他們當成了錯誤,根本原因在於,java裡異常是唯一的錯誤報表方式,而在php中卻不是這樣。通俗一點就是,這兩門語言的設計者對於異常和錯誤的界定存在分歧,什麼是異常,什麼是錯誤,他們的設計者存在不同的觀點而已。
說道異常,就不得不提php中異常的兄弟-----錯誤。php中錯誤的處理比異常的價值大得多,而且php提供了比較強大的錯誤處理函數,詳細請自己查閱手則或者網路資源。