本篇文章給大家分享的内容是解決PHP中的出現的錯誤處理以及異常處理機制的辦法,有着一定的參考價值,有需要的朋友可以參考一下
在編寫PHP程式時,錯誤處理是一個重要的部分。如果程式中缺少錯誤檢測代碼,那麼看上去很不專業,也為安全風險敞開了大門
例:
1 2 3 4 | |
那麼正确的寫法應該如下:
1 2 3 4 5 6 7 | |
一、PHP錯誤處理的三種方式
A、簡單的die()語句;
等價于exit();
例:
1 2 3 4 5 6 7 | |
簡潔寫法:
1 2 | |
B、自定義錯誤和錯誤觸發器
1、錯誤處理器(自定義錯誤,一般用于文法錯誤處理)
建立自定義錯誤函數(處理器),該函數必須有能力處理至少兩個參數(error_level和errormessage),但是可以接受最多五個參數(error_file、error_line、error_context)
文法:
1 2 3 | |
錯誤報告級别(了解即可)
這些錯誤報告級别是錯誤處理程式旨在處理的錯誤的不同的類型:
1 2 3 4 5 6 7 8 | |
2、錯誤觸發器(一般用于處理邏輯上的錯誤)
需求:比如要接收一個年齡,如果數字大于120,就認為是一個錯誤
傳統方法:
1 2 3 4 5 6 | |
使用觸發器:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | |
練習題:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | |
C、錯誤日志
預設的根據php.ini中error_log配置,PHP向伺服器的錯誤記錄系統或檔案發送錯誤記錄。通過使用error_log()函數可以向檔案或遠端目的地發送錯誤記錄;
文法:
1 | |
type部分一般用3,表示在檔案後面追加錯誤資訊,而不會覆寫原内容destination表示目的地,即存放的檔案或遠端目的地
如:error_log("$error_info",3,"errors.txt");
二、PHP異常處理【重點】
1、基本文法
1 2 3 4 5 6 7 8 9 10 | |
2、處理處理程式應當包括:
try - 使用異常的函數應該位于 "try" 代碼塊内。如果沒有觸發異常,則代碼将照常繼續執行。但是如果異常被觸發,會抛出一個異常;
throw - 這裡規定如何觸發異常。每一個 "throw" 必須對應至少一個 "catch";
catch - "catch" 代碼塊會捕獲異常,并建立一個包含異常資訊的對象;
讓我們觸發一個異常:
<
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | |
上面代碼将獲得類似這樣一個錯誤:
Message: Value must be 1 or below
例子解釋:
上面的代碼抛出了一個異常,并捕獲了它:
建立 checkNum() 函數,它檢測數字是否大于 1,如果是,則抛出一個異常。
在 "try" 代碼塊中調用 checkNum() 函數。
checkNum() 函數中的異常被抛出。
"catch" 代碼塊接收到該異常,并建立一個包含異常資訊的對象 ($e)。
通過從這個 exception 對象調用 $e->getMessage(),輸出來自該異常的錯誤消息。
不過,為了遵循“每個 throw 必須對應一個 catch”的原則,可以設定一個頂層的異常處理器來處理漏掉的錯誤。
set_exception_handler()函數可設定處理所有未捕獲異常的使用者定義函數。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | |
建立一個自定義的異常類
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | |
可以使用多個catch來傳回不同情況下的錯誤資訊
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | |
異常的規則
需要進行異常處理的代碼應該放入 try 代碼塊内,以便捕獲潛在的異常。
每個try或throw代碼塊必須至少擁有一個對應的 catch 代碼塊。
使用多個 catch 代碼塊可以捕獲不同種類的異常。
可以在try代碼内的catch 代碼塊中再次抛出(re-thrown)異常。
簡而言之:如果抛出了異常,就必須捕獲它。
以上就是解決PHP中的出現的錯誤處理以及異常處理機制的辦法的詳細内容,更多請關注php中文網其它相關文章!