擴充PHP內建的異常處理類

來源:互聯網
上載者:User

標籤:http   os   使用   io   ar   檔案   2014   div   cti   

在try代碼塊中,需要使用throw語句拋出一個異常對象,才能跳到轉到catch代碼塊中執行,並在catch代碼塊中捕獲並使用這個異常類的對象。雖然在PHP中提供的內建異常處理類Exception,已經具有非常不錯的特性,但在某些情況下,可能還要擴充這個類來得到更多的功能。所以使用者可以用自訂的異常處理類來擴充PHP內建的異常處理類。以下代碼說明了在內建的異常處理類中,哪些屬性和方法在子類中是可訪問和可繼承的:

12345678910111213141516171819 <?php class Exception{protected $message = ‘Unknown exception‘; //異常資訊protected $code = 0; //使用者自訂異常代碼protected $file; //發生異常的檔案名稱protected $line; //發生異常的程式碼號 function __construct($message =null,$code=0){}final function getMessage(){} //返回異常資訊final function getCode(){} //返回異常代碼final function getFile(){} //返回傳生異常的檔案名稱final function getLine(){} //返回傳生異常的程式碼號final function getTrace(){} //backtrace()數組final function getTraceAsString(){} //已格式化成字串的getTrace()資訊 //可重載的方法,可輸出字串function __toString(){}}?>

上面這段代碼只為說明內建異常處理函數類Exception的結構,它並不是一段有實際意義的可用代碼。如果使用自訂的類作為異常處理類,則必須是擴充內建異常處理類Exception的子類,非Exception類的子類是不能作為異常處理類使用的。如果在擴充內建異常處理類Excepiton時重新定義建構函式,建議同時調用parent::construct()來檢查所有的變數是否已被賦值。當對象要輸出字串的時候,可以重載__toString()並自訂輸出的樣式。可以在自訂的子類中,直接使用內建異常處理Exception類中的所有成員屬性,但不能重新改寫從該父類中繼承過來的成員方法,因為該類的大多數公有方法都是final的。
建立自訂的例外處理常式非常簡單,和傳統類的聲明方式相同,但該類必須是內建異常處理類Exception的一個擴充。當PHP中發生異常時,可調用自訂異常類中的方法進行處理。建立一個自訂的MyException類,繼承了內建異常處理類Exception中的所有屬性,並向其添加了自訂的方法。代碼及應用如下所示:

123456789101112131415161718192021222324252627282930 <?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 ‘你好呀‘; //程式沒有崩潰繼續向下執行?>

在自訂的MyExcepition類中,使用父類中的構造方法檢查所有的變數是否已被賦值。而且重載了父類中的__toString()方法,輸出自己定製捕獲的異常處理類,在使用上沒有多大區別,只不過在自訂的異常處理類中,可以調用為具體的異常專門編寫的處理方法。

 

>> 本文固定連結: http://php.ncong.com/php_course/wrong/yichangchulilei.html

>> 轉載請註明: 恩聰php 2014年08月06日 於 恩聰PHP學習教程 發表

擴充PHP內建的異常處理類

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.