任何程式設計師在開發時都可能遇到一些失誤,或其他原因造成錯誤的發生。當然,使用者如果不願意或不遵循應用程式的約束,也會在使用時造成一些錯誤發生。以下這篇文章主要為大家介紹了關於PHP中常見的錯誤與異常處理,需要的朋友可以參考下,
前言
當我們開發程式時,程式出現問題是很常見的,當出現了異常與錯誤我們該如何處理呢?本文將詳細跟大家介紹PHP錯誤與異常處理的相關內容,分享出來供大家參考學習,下面話不多說了,來一起看看詳細的介紹:
一、PHP錯誤處理
1.語法錯誤
#2.執行階段錯誤
3.邏輯錯誤:不提示錯誤,但功能不對,最麻煩
4.三種等級:notice/warning/fatal error(無法繼續執行)
#5.錯誤報告顯示:
a.可以在php.ini修改error_reporting項目,以限定錯誤報告類型,如:error_reporting=E_ALL & ~E_NOTICE
b.只修改某個腳本內的錯誤顯示,可以使用error_reporting(E_ALL & ~E_NOTICE);
(建議)
6.自訂錯誤回報:set_error_handler()
可以傳入用以顯示錯誤的預定參數,如下:
##
set_error_handler('reportError'); $mess=""; function reportError($error_type,$error_message,$error_file,$error_line){ global $mess; $mess.="发生错误级别为{$error_type}类型,错位信息<b>{$error_message}</b>,在文件{$error_file}中,第{$error_line}行。<br>"; } getType($a); echo "1111111<br>"; getType(); echo "2222<br>"; echo $mess; /*发生错误级别为8类型,错位信息Undefined variable: a,在文件F:\projects\Frame\FrameTest\BackEnd\regularExpression.php中,第24行。 发生错误级别为2类型,错位信息gettype() expects exactly 1 parameter, 0 given,在文件F:\projects\Frame\FrameTest\BackEnd\regularExpression.php中,第26行。*/
error_log="C:/XX/XX/php_error.log"
ini_set("display_errors","Off")或ini_get在腳本內部設定
#二、PHP異常處理
1.try catch一體的,中間不能有任何程式碼try{ echo "开车上班<br>"; throw new Exception("车子爆胎了!"); }catch(Exception $e){//相当于Exception $e = new Exception(''); echo $e->getMessage().'<br>'; echo '换上备胎,继续上班<br>'; }
##
set_error_handler('reportError'); function reportError($error_type,$error_message,$error_file,$error_line){ if($error_type==E_WARNING){ throw new Exception("错误信息:{$error_message},错误文件:{$error_file},错误行数{$error_line}"); } } function drive($a){ echo $a; } try{ echo "开车上班<br>"; drive();//忘记传参,触发自定义错误函数中警告性错误,抛出异常 }catch(Exception $e){//相当于Exception $e = new Exception(''); echo $e->getMessage().'<br>'; echo "换上备胎,继续上班<br>"; }
a.Exception類別是所有例外的基底類別,沒有定義特定例外的處理方法(只有一些取得提示的方法)
# b.自訂的例外類別必須是系統類別的子類別
c.如果繼續了Exception類,重寫了建構方法,不要忘記呼叫父類別建構方法進行初始化
class BTException extends Exception { function __construct($message){ parent::__construct($message); } function method(){ return "打开后备箱,拿出工具,换备胎"; } } try{ echo "开车上班<br>"; throw new BTException("车子爆胎了!"); }catch(BTException $e){//相当于Exception $e = new Exception(''); echo $e->getMessage().'<br>'; echo $e->method().'<br>'; echo "换上备胎,继续上班<br>"; }
class Err1 extends Exception { function __construct($message){ parent::__construct($message); } function method(){ return "纠正错误1"; } } class Err2 extends Exception { function __construct($message){ parent::__construct($message); } function method(){ return "纠正错误2"; } } class Err3 extends Exception { function __construct($message){ parent::__construct($message); } function method(){ return "纠正错误3"; } } $rand=rand(1,3); try{ switch($rand){ case 1: throw new Err1("发生错误1"); case 2: throw new Err2("发生错误2"); case 3: throw new Err3("发生错误3"); } }catch(Err1 $e){ echo $e->getMessage().'<br>'; echo $e->method().'<br>'; }catch(Err2 $e){ echo $e->getMessage().'<br>'; echo $e->method().'<br>'; }catch(Err3 $e){ echo $e->getMessage().'<br>'; echo $e->method().'<br>'; }
以上是php中關於錯誤與異常處理的詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!