首頁  >  文章  >  後端開發  >  php中關於錯誤與異常處理的詳解

php中關於錯誤與異常處理的詳解

黄舟
黄舟原創
2017-08-22 09:41:231642瀏覽

任何程式設計師在開發時都可能遇到一些失誤,或其他原因造成錯誤的發生。當然,使用者如果不願意或不遵循應用程式的約束,也會在使用時造成一些錯誤發生。以下這篇文章主要為大家介紹了關於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行。*/

7.記錄錯誤日誌

     a.將PHP.inidisplay_errors設定為Off,log_errors設定為On


     b.自訂日誌目錄

error_log="C:/XX/XX/php_error.log"


#      c.也可使用

ini_set("display_errors","Off")或ini_get在腳本內部設定

#二、PHP異常處理

1.try catch一體的,中間不能有任何程式碼


2.Exception是系統預定義的類別


3.如果有異常物件拋出,就將異常物件給catch中的類別


4.try中發生異常位置後的程式碼不再繼續執行,而是直接轉到catch中執行


 try{
 echo "开车上班<br>";
 throw new Exception("车子爆胎了!");
 }catch(Exception $e){//相当于Exception $e = new Exception(&#39;&#39;);
 echo $e->getMessage().&#39;<br>&#39;;
 echo &#39;换上备胎,继续上班<br>&#39;;
 }

5.異常處理可以配合錯誤處理一起使用

##

 set_error_handler(&#39;reportError&#39;);
 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(&#39;&#39;);
 echo $e->getMessage().&#39;<br>&#39;;
 echo "换上备胎,继续上班<br>";
 }

6.自訂例外類別

      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(&#39;&#39;);
 echo $e->getMessage().&#39;<br>&#39;;
 echo $e->method().&#39;<br>&#39;;
 echo "换上备胎,继续上班<br>";
 }

7.捕捉多個例外,註:try中也可嵌套try

##
 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().&#39;<br>&#39;;
 echo $e->method().&#39;<br>&#39;;
 }catch(Err2 $e){
 echo $e->getMessage().&#39;<br>&#39;;
 echo $e->method().&#39;<br>&#39;;
 }catch(Err3 $e){
 echo $e->getMessage().&#39;<br>&#39;;
 echo $e->method().&#39;<br>&#39;;
 }


總結

以上是php中關於錯誤與異常處理的詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn