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

來源:互聯網
上載者:User
任何程式員在開發時都可能遇到過一些失誤,或其他原因造成錯誤的發生。當然,使用者如果不願意或不遵循應用程式的約束,也會在使用時引起一些錯誤發生。下面這篇文章主要給大家介紹了關於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.ini中display_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(''); echo $e->getMessage().'<br>'; echo '換上備胎,繼續上班<br>'; }

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


 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>"; }

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(''); echo $e->getMessage().'<br>'; echo $e->method().'<br>'; 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().'<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>'; }

總結

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.