php異常、錯誤處理機制
在實際開發中,錯誤及異常捕捉僅靠try{}catch()是遠不夠的。 所以引用以下幾中函數。
我們先來說異常:
首先要明白異常跟錯誤是不一樣的,異常是出現正常邏輯之外的情況,而錯誤是指運行時出錯了,比如,使用了一個未定義的變數等,異常需要拋出(throw)才能被捕捉到,而錯誤會導致程式執行終止
1、通常處理異常的方式是使用try{}catch{}去捕捉有throw拋出的異常
[ php] view
plaincopy
- try{
-
throw ; } catch(Exception $e
){
- echo $e
->getMessage(), ->getTraceAsString(); - } 2、透過set_exception_handler函數設定異常處理函數,在這種情況下,即使沒有try{}catch{},throw捕捉 [php] view
plaincopy
set_exception_handler(- 'exceptionHandler'
);
(
"kkkkkkkkkkkkkkkk");
- function exceptionHandler(Exception $exception){
- $exception->getMessage(); }
接下來討論錯誤:-
通常程式出錯了,php會輸出出錯的資訊來幫助調試,但是這個資訊的輸出是可以透過函數error_reporting()來控制的。在php中錯誤是分等級和種類的,以下是所有錯誤種類的說明:E_ALL - 所有的錯誤和警告(不包括E_STRICT)E_ERROR - 致命性的運行時錯誤E_WARNING - 運行時警告(非致命性錯誤)E_PARSE - 編譯時解析錯誤E_NOTICE - 運行時提醒(這些經常是你代碼中的bug引起的,也可能是有意的行為造成的。)E_STRICT - 編碼標準化警告,允許PHP建議如何修改程式碼以確保最佳的互通性向前相容性。 E_CORE_ERROR - PHP啟動時初始化過程中的致命錯誤E_CORE_WARNING - PHP啟動時初始化過程中的警告(非致命性錯)E_COMPILE_ERROR - 編譯時致命性錯
E_COMPILE_WARNING - 編譯時警告(非致命性錯E_USER_ERROR - 使用者自訂的錯誤訊息- E_USER_WARNING - 使用者自訂的警告訊息E_USER_NOTICE - 使用者自訂的提醒訊息
- 如果設定了error_reporting(E_NOTICE),那麼一般程式輸出的資訊,那麼一般程式碼的時候只要設定error_reporting(E_ALL&!E_WARNING)就行了上面我們看到有一種錯誤叫用戶自訂的錯誤訊息,這是什麼呢?我們先來看一個例子[php] view
plaincopy
- set_error_handler('errorHandler');
-
trigger_error(trigger_error(
- aaaa" function errorHandler($errno, $errstr){
- "white-space:pre" USER_ERROR){ "white-space:pre">
echo- ; "white-space:pre"> } }
- 輸出結果:[php] view
plaincopy
- innnnnnnni:aaaaaaasssssss
- trigger_error()就是用來拋出使用者自訂錯誤訊息的函數,透過這個訊息能被拋出錯誤的函數嚴重的邏輯問題
上面的程式我們看到,當程式出錯時,除了讓Php預設輸出出錯訊息外,我們還能設定自己的錯誤處理函數,設定的方法就是
set_error_handler(),下面來來看個例子[php] view
plaincopy
- set_error_handler('errorHandler'
);
echo
$ cc
- ;//$cc沒有定義,echo會出錯
- function ){ if
(- $errno==E_NOTICE){ $errstr;
-
} } 輸出結果:ddddddddddddinnnnnnnni:Undefined variable: cc
-
以上就介紹了php異常、錯誤處理機制,包含了面向的內容,希望對PHP教學有興趣的朋友有幫助。