PHP錯誤和異常處理

來源:互聯網
上載者:User

標籤:

PHP 5 添加了類似於其它語言的異常處理模組。在 PHP 代碼中所產生的異常可被 throw 語句拋出並被 catch 語句捕獲。

需要進行異常處理的代碼都必須放入 try 代碼塊內,以便捕獲可能存在的異常。每一個 try 至少要有一個與之對應的 catch

使用多個 catch 可以捕獲不同的類所產生的異常。當 try 代碼塊不再拋出異常或者找不到 catch 能匹配所拋出的異常時,PHP 代碼就會在跳轉到最後一個 catch 的後面繼續執行。當然,PHP 允許在 catch 代碼塊內再次拋出(throw)異常。 

Example:拋出並捕獲一個異常

<?phptry{throw new Exception("catch a exception",42);}catch(Exception $e){echo $e;}?>

 使用者可以用自訂的異常處理類來擴充 PHP 內建的異常處理類。

PHP內建Exception類:(譯者註:以下這段代碼只為說明內建異常處理類的結構,它並不是一段有實際意義的可用代碼。)

<?phpclass 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();                       // 可輸出的字串}?>

 如果使用自訂的類來擴充內建異常處理類,並且要重新定義建構函式的話,建議同時調用 parent::__construct() 來檢查所有的變數是否已被賦值。當對象要輸出字串的時候,可以重載 __toString() 並自訂輸出的樣式。 

Example #2 擴充 PHP 內建的異常處理類

<?php /** * 自訂一個異常處理類 */ class  MyException  extends  Exception {     // 重定義構造器使 message 變為必須被指定的屬性     public function  __construct ( $message ,  $code  =  0 ) {         // 自訂的代碼        // 確保所有變數都被正確賦值         parent :: __construct ( $message ,  $code );    }     // 自訂字串輸出的樣式     public function  __toString () {        return  __CLASS__  .  ": [ { $this -> code } ]:  { $this -> message } \n" ;    }    public function  customFunction () {        echo  "A Custom function for this type of exception\n" ;    }} /** * 建立一個用於測試異常處理機制的類 */ class  TestException {    public  $var ;    const  THROW_NONE     =  0 ;    const  THROW_CUSTOM   =  1 ;    const  THROW_DEFAULT  =  2 ;    function  __construct ( $avalue  =  self :: THROW_NONE ) {        switch ( $avalue ) {            case  self :: THROW_CUSTOM :                 // 拋出自訂異常                 throw new  MyException ( ‘1 is an invalid parameter‘ ,  5 );                break;            case  self :: THROW_DEFAULT :                 // 拋出預設的異常                 throw new  Exception ( ‘2 isnt allowed as a parameter‘ ,  6 );                break;            default:                 // 沒有異常的情況下,建立一個對象                 $this -> var  =  $avalue ;                break;        }    }} // 例子 1 try {     $o  = new  TestException ( TestException :: THROW_CUSTOM );} catch ( MyException $e ) {       // 捕獲異常     echo  "Caught my exception\n" ,  $e ;     $e -> customFunction ();} catch ( Exception $e ) {         // 被忽略     echo  "Caught Default Exception\n" ,  $e ;} // 執行後續代碼 var_dump ( $o );echo  "\n\n" ; // 例子 2 try {     $o  = new  TestException ( TestException :: THROW_DEFAULT );} catch ( MyException $e ) {       // 不能匹配異常的種類,被忽略     echo  "Caught my exception\n" ,  $e ;     $e -> customFunction ();} catch ( Exception $e ) {         // 捕獲異常     echo  "Caught Default Exception\n" ,  $e ;} // 執行後續代碼 var_dump ( $o );echo  "\n\n" ; // 例子 3 try {     $o  = new  TestException ( TestException :: THROW_CUSTOM );} catch ( Exception $e ) {         // 捕獲異常     echo  "Default Exception caught\n" ,  $e ;} // 執行後續代碼 var_dump ( $o );echo  "\n\n" ; // 例子 4 try {     $o  = new  TestException ();} catch ( Exception $e ) {         // 沒有異常,被忽略     echo  "Default Exception caught\n" ,  $e ;} // 執行後續代碼 var_dump ( $o );echo  "\n\n" ; ?> 

  

 

 

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.