PHP錯誤機制

在實際開發中,錯誤及異常捕捉僅僅靠try{}catch()是遠遠不夠的。 所以引用以下幾中函數。


我們先來說異常:

首先要明白異常跟錯誤是不一樣的,異常是出現正常邏輯之外的情況,而錯誤是指運行時出錯了,比如,使用了一個未定義的變量等,異常需要拋出(throw)才能被捕捉到,而錯誤會導致程序執行終止

1、通常處理異常的方式是使用try{}catch{}去捕捉有throw拋出的異常

  1. try{  
  2.     throw new Exception("kkkkkkkkkkkkkkkk");  
  3. }  
  4. catch(Exception $e){  
  5.     echo $e->getMessage(),"</br>",$e->getTraceAsString();  
  6. }  

2、通過set_exception_handler函數設置異常處理函數,在這種情況下,即使沒有try{}catch{},throw拋出的異常也能由set_exception_handler設置的函數自動捕捉

  1. set_exception_handler('exceptionHandler');  
  2. throw new Exception("kkkkkkkkkkkkkkkk");  
  3. function exceptionHandler(Exception $exception){  
  4.       
  5.     echo $exception->getMessage();  
  6. }  


接下來討論錯誤:

通常程序出錯了,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),那麼程序只會輸出E_NOTICE等級的信息,一般我們使用的時候只需要設置error_reporting(E_ALL&!E_WARNING)就行了


上面我們看到有一種錯誤叫用戶自定義的錯誤消息,這是什麼呢?我們先看一個例子

  1. set_error_handler('errorHandler');  
  2. trigger_error("aaaaaaassssssssssss",E_USER_ERROR);  
  3. function errorHandler($errno,$errstr){  
  4. <span style="white-space:pre">  </span>if($errno==E_USER_ERROR){  
  5. <span style="white-space:pre">      </span>echo "innnnnnnni:",$errstr;  
  6. <span style="white-space:pre">  </span>}  
  7. <span style="white-space:pre">  </span>  
  8. }  
輸出結果:
  1. innnnnnnni:aaaaaaassssssssssss  

trigger_error()就是用來拋出用戶自定義錯誤消息的函數,通過這個我們能拋出自定義的一些消息被當作錯誤來處理,比如嚴重的邏輯問題


上面的程序我們看到,當程序出錯時,除了讓Php默認輸出出錯信息外,我們還能設置自己的錯誤處理函數,設置的方法就是set_error_handler(),下面來看個例子

  1. set_error_handler('errorHandler');  
  2. echo "dddddddddddd</br>";  
  3. echo $cc;//$cc沒有定義,echo會出錯  
  4. function errorHandler($errno,$errstr){  
  5.     if($errno==E_NOTICE){  
  6.         echo "innnnnnnni:",$errstr;  
  7.     }  
  8. }  

輸出結果:dddddddddddd
innnnnnnni:Undefined variable: cc
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章