本篇文章給大家帶來的內容是關於php中錯誤及異常處理的介紹(代碼示例),有一定的參考價值,有需要的朋友可以參考一下,希望對你有所幫助。
一.php錯誤處理的三種方式
A:簡單的die()語句
等價於exit();
B:自定義錯誤和錯誤觸發器
1.錯誤處理器(自定義錯誤,一般用於語法錯誤處理)
創建一定義錯誤函數(處理器),該函數必須有能力處理至少兩個參數(error_level和error_message),但是可以接受最多五個參數(erroe_file,error_line,error_context)
語法:
function error_function($error_level,$error_message,$error_fiel,$error_line,$error_context)
//創建好後還需要改寫一個set_error_handler()函數
set_error_handler(『error_function,E_WARNING』)//這裡error_function對應上面創建的自定義處理器名,第二個參數為使用自定義錯誤處理器的錯誤級別。
錯誤級別:
這些錯誤報告級別是錯誤處理程序旨在處理的錯誤的不同的類型:
值
常量
描述
2
E_WARNING
非致命的 run-time 錯誤。不暫停腳本執行。
8
E_NOTICE
Run-time 通知。腳本發現可能有錯誤發生,但也可能在腳本正常運行時發生。
256
E_USER_ERROR
致命的用戶生成的錯誤。這類似於程式設計師使用 PHP 函數 trigger_error() 設置的 E_ERROR。
512
E_USER_WARNING
非致命的用戶生成的警告。這類似於程式設計師使用 PHP 函數 trigger_error() 設置的 E_WARNING。
1024
E_USER_NOTICE
用戶生成的通知。這類似於程式設計師使用 PHP 函數 trigger_error() 設置的 E_NOTICE。
4096
E_RECOVERABLE_ERROR
可捕獲的致命錯誤。類似 E_ERROR,但可被用戶定義的處理程序捕獲。(參見 set_error_handler())
8191
E_ALL
所有錯誤和警告,除級別 E_STRICT 以外。(在 PHP 6.0,E_STRICT 是 E_ALL 的一部分)
2.錯誤觸發器(一般用於處理邏輯上的錯誤)
需求:比如要接受一個年齡,如果數字大於120,就認為是個錯誤
傳統方法:
if($age>120){
echo(』年齡錯誤』);
exit();
}
?>
使用觸發器:
if($age>120){
trigger_error(『年齡錯誤』);
}
//自定義處理器
function myerror(¥error_level,¥error_message){
echo 『error text』;
}
//同時需要改變系統默認的處理器函數
set_error_handler(『myerror』,E_USER_WARNING);
?>
C:錯誤日誌
默認的根據php.ini中error_log配置,PHP向伺服器的錯誤記錄系統或文件發送錯誤記錄。通過使用error_log()函數可以向文件或者遠程目的地發送錯誤記錄。
語法:
error_log(error[,type,destination,headers])
Type部分一般用3,表示在文件後面追加錯誤信息,而不會覆蓋原內容destination表示目的地,即存放的文件或遠程目的地
如:
error_log(「$error_info」,3,」errors.txt」);
二. php 異常處理
1.基本語法
try{
//可能出現異常或者錯誤的代碼
//catch 捕獲異常
}catch(Exception $e){
//對異常處理,方法
//1.自己處理
//2.不處理,可以再次拋出throw new Exception(『XXX』);
}
?>
2.處理程序應當包括:
1.try—使用異常的函數應該位於『try』代碼塊內,如果沒有觸發異常,則代碼將照常繼續執行。但是如果異常被觸發,或拋出一個異常;
2.throw — 這裡規定如何觸發異常,每一個「throw」必須對應至少一個『catch』;
3.catch — 『catch』代碼塊會捕獲異常,並創建一個包含異常信息的對象。
eg:
/**
* 創建可拋出一個異常的函數
*/
function checkNum($number) {
if ($number > 1) {
throw new Exception("Value must be 1 or below");
}
return true;
}
// 在 "try" 代碼塊中觸發異常
try {
checkNum(2);
// 如果異常被拋出,那麼下面一行代碼將不會被輸出
echo 'If you see this, the number is 1 or below';
} catch (Exception $e) {
// 捕獲異常
echo 'Message: ' . $e->getMessage();
}
?>
例子解釋:
上面的代碼拋出了一個異常,並捕獲了它:
異常的規則:
總結:簡而言之,如果拋出了異常,就必須捕獲他。
以上就是php中錯誤及異常處理的介紹(代碼示例)的詳細內容,更多請關注其它相關文章!
更多技巧請《轉發 + 關注》哦!