1. 程式人生 > >4、php的錯誤異常處理(自定義異常類)

4、php的錯誤異常處理(自定義異常類)

一、php自帶的異常處理類:

<?php
class Exception {
    protected $message; // 異常資訊
    protected $code; // 使用者自定義異常程式碼
    protected $file; // 發生異常的檔名
    protected $line; // 發生異常的程式碼行號

    final private function __clone() { }

    public function __construct($message = "", $code = 0, Throwable $previous = null) { }

    final public function getMessage() { } //返回異常資訊
    final public function getCode() { } // 返回異常程式碼
    final public function getFile() { } // 返回發生異常的檔名
    final public function getLine() { } // 返回發生異常的程式碼行號
    final public function getTrace() { } // backtrace() 陣列
    final public function getPrevious() { } // 返回異常鏈中的前一個異常

    final public function getTraceAsString() { } // 已格成化成字串的 getTrace() 資訊

    /* 可過載的方法 */
    public function __toString() { } // 可輸出的字串
}

   二、為什麼定義自己的異常類

          1、自定義的異常類必須是系統異常類的子類。

          2、當系統異常類的功能和需求不能滿足的時候就需要定義自己的異常處理類。

 三、自定義處理異常類。

<?php
	/* 自定義的一個異常處理類,但必須是擴充套件內異常處理類的子類 */
	class MyException extends Exception{
		//重定義構造器使第一個引數 message 變為必須被指定的屬性
		public function __construct($message, $code=0){
		    //可以在這裡定義一些自己的程式碼
		 //建議同時呼叫 parent::construct()來檢查所有的變數是否已被賦值
		    parent::__construct($message, $code);
		}	
		public function __toString() {        
          //重寫父類方法,自定義字串輸出的樣式
		  return __CLASS__.":[".$this->code."]:".$this->message."<br>";
		}
		public function customFunction() {    
             //為這個異常自定義一個處理方法
		     echo "按自定義的方法處理出現的這個型別的異常<br>";
		}
	}


    try { //使用自定義的異常類捕獲一個異常,並處理異常
		$error = '允許丟擲這個錯誤';       
		throw new MyException($error);    
         	//建立一個自定義的異常類物件,通過throw語句丟擲
		echo 'Never executed'; 
			//從這裡開始,try程式碼塊內的程式碼將不會再被執行
	} catch (MyException $e) {        //捕獲自定義的異常物件
		echo '捕獲異常: '.$e;        //輸出捕獲的異常訊息
		$e->customFunction();  //通過自定義的異常物件中的方法處理異常
	}
	echo '你好呀';              //程式沒有崩潰繼續向下執行

?>