php中錯誤及異常處理的介紹(代碼示例)

2019-11-01     科技i關注

本篇文章給大家帶來的內容是關於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();

}

?>

例子解釋:

上面的代碼拋出了一個異常,並捕獲了它:

  1. 創建 checkNum() 函數,它檢測數字是否大於 1,如果是,則拋出一個異常。
  2. 在 "try" 代碼塊中調用 checkNum() 函數。
  3. checkNum() 函數中的異常被拋出。
  4. "catch" 代碼塊接收到該異常,並創建一個包含異常信息的對象 ($e)。
  5. 通過從這個 exception 對象調用 $e->getMessage(),輸出來自該異常的錯誤消息。

異常的規則:

  • 需要進行異常處理的代碼應該放入try代碼塊內,以便捕獲潛在的異常
  • 每個try或者throw代碼塊必須至少一個對應的catch代碼塊
  • 使用多個catch代碼塊可以捕獲不同種類的異常
  • 可以在try代碼內的catch代碼塊中再次輸出(re_throw)異常。

總結:簡而言之,如果拋出了異常,就必須捕獲他。

以上就是php中錯誤及異常處理的介紹(代碼示例)的詳細內容,更多請關注其它相關文章!

更多技巧請《轉發 + 關注》哦!

文章來源: https://twgreatdaily.com/wjEQJG4BMH2_cNUgb70X.html