PHP錯誤與異常處理

1、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.記錄錯誤日誌spa

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在腳本內部進行設定

2、PHP異常處理3d

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.異常處理能夠配合錯誤處理一塊兒使用code

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.捕獲多個異常,注:catch中還可嵌套try,即:在修正異常時還可能發生其餘異常blog

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>';
    }
相關文章
相關標籤/搜索