PHP系列(七)PHP錯誤異常處理

科技小能手發表於2017-11-12

1、Php錯誤報告級別

1 E_ERROR 致命的執行錯誤。錯誤無法恢復,暫停執行指令碼。

2 E_WARNING 執行時警告(非致命性錯誤)。非致命的執行錯誤,指令碼執行不會停止。

4 E_PARSE 編譯時解析錯誤。解析錯誤只由分析器產生。

8 E_NOTICE 執行時提醒(這些經常是你程式碼中的bug引起的,也可能是有意的行為造成的。)

 error_reporting = E_ALL & ~E_NOTICE

2、自定義php錯誤報告方式

set_error_handler(“myerrorfun”);

$mess =””;

function  myerrorfun($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”$mess”;

顯示為:發生錯誤級別為8型別、錯誤訊息Undefined variable: a,在資料夾C:AppServwwwindex.php,第9行。

 set_error_handler($_type,$_message,$_errfile,$_errline) 函式設定使用者自定義的錯誤處理程式,然後觸發錯誤

3、php記錄錯誤日誌

log_errors = on 開啟php日誌

error_log =syslog  將php日誌寫到系統上去。

error_log = “c:/lamp/php_error.log”;自已指定一個存放目錄、與上面相斥

ini_set(“log_errors”,“on”); 在php開發檔案裡設定

 

try{

            echo”開始”;

            run();

}catch(Exception $e){

            echo$e->getMessage().”<br>”;

}

//當try{}裡面不成功就丟擲catch裡面的異常

4、自定義異常類

//自定義異常類、必須是系統類Exception的子類

//如果繼承Exception類、重寫了構造方法、一定要調一下父類中被覆蓋的方法/

class  MyBtException extends  Exception{

            function__construct($mess){

                       parent::__construct($mess);

            }

            functionchangBt(){

                       echo”換個備胎”;

            }

}

try{

            throw  new  MyBtException(“車子胞胎”);

            echo”路況很好!”;

}catch(MyBtException $e){

            Echo  $e->getMessage().”<br>”;

            $e->changBt().”<br>”;

}

5、自定義多個異常類

            //寫出對應這個異常解決方法, 就是一下正常類的結構

            class MyBtException  extends  Exception{

                       function__construct($mess) {

                                   parent::__construct($mess);

                       }

                       functionchangBt() {

                                   echo”換上備胎!”;

                       }

            }

            class  WcException  extends  Exception {

                       functionpro() {

                                   echo”去公廁<br>”;

                       }

            }

            class  NoException  extends  Exception {

                       functionpro() {

                                   echo”買面色湊合一下!<br>”;

                       }

            }

            Class  FlException  extends  Exception {

                       functionpro() {

                                   echo”走小路!<br>”;

                       }

            }


class  Dm  {

            function gowc($bj) {

                       if(!$bj){

                                   throw new WcException(“馬桶不好用了”);

                       }

                       echo”哈哈,事兒辦的很成功!<br>”;

            }

 

            function eat($time) {

                       if(!$time){

                                   thrownew NoException(“起來晚了,早餐沒了!”);

                       }

                       echo”吃的很好!<br>”;

            }

            function dri($dz) {

                       if(!$dz){

                                   throw new  MyBtException(“爆胎了”);

                       }

                       echo”車開的不錯!<br>”;

            }

            function run($yu) {

                       if(!$yu){

                                   throw new  FlException(“天下雪了, 高速封路了”);

                       }

                       echo”高速很好走!<br>”;

            }

}

echo “早上起床<br>”;


try{

            $dm =new  Dm();

            // 1. 上廁所  (馬桶不好用了),去公廁

            $dm-> gowc(true);

            // 2. 吃早餐 (沒有早點),買麵包

            $dm-> eat(true);

            //3. 開車上班 (爆tai)         換下

            $dm->dri(true);

 

            //4. 上高速  (下雪)  小路

            $dm->run(false);

} catch(MyBtException  $e) {   //  Exception $e = newException(“);

            echo$e->getMessage().”<br>”;

            //自定義類中的解決方法呼叫,解決了問題

            $e->changBt().”<br>”;

            try {

            }catch(Exception$e) {

            }

} catch(NoException $e) {

            echo$e->getMessage().”<br>”;

            $e->pro();

} catch(WcException $e) {

            echo$e->getMessage().”<br>”;

            $e->pro();

} catch(Exception $e) {

            echo$e->getMessage().”<br>”;

            //$e->pro();

}

            echo”到公司開始工作<br>”;

本文轉自 sswqzx 51CTO部落格,原文連結:http://blog.51cto.com/sswqzx/1968854


相關文章