西西軟件下載最安全的下載網(wǎng)站、值得信賴的軟件下載站!

首頁編程開發(fā)php教程 → PHP 的錯誤、異常等級常量表,異常處理及錯誤回調(diào)函數(shù)

PHP 的錯誤、異常等級常量表,異常處理及錯誤回調(diào)函數(shù)

相關(guān)軟件相關(guān)文章發(fā)表評論 來源:西西整理時間:2012/12/5 11:20:56字體大。A-A+

作者:ecalf點擊:0次評論:0次標(biāo)簽: 異常處理

2 頁 try-catch

二、error_reporting() 及 try-catch、thrown 

error_reporting() 函數(shù)可以獲取(不傳參時)、設(shè)定腳本處理哪些異常(并非所有異常都需要處理,例如 E_CORE_WARNING、E_NOTICE、E_DEPRECATED 是可以忽略的),該設(shè)定將覆蓋 php.ini 中 error_reporting選項定義的異常處理設(shè)定。

例如: 

error_reporting(E_ALL&~E_NOTICE) ; // 除了E_NOTICE其他異常都會被觸發(fā)(E_ALL&~E_NOTICE的二進(jìn)制運算結(jié)果是:E_NOTICE對應(yīng)位的值被設(shè)置為0)

try-catch 無法在類的自動加載函數(shù) __autoload() 內(nèi)生效。

try-catch 無法用于捕獲異常,無法捕獲錯誤,例如 trigger_error() 觸發(fā)的錯誤,異常和錯誤是不一樣的。

try{

  // you codes that maybe cause an error

}catch(Exception $err){ // 這個錯誤對象需要聲明類型, Exception 是系統(tǒng)默認(rèn)異常處理類

    echo $err->getMessage();

}


//thrown 可以拋出一個異常,如:

thrown new Exception('an error');

一個例子:

try {

    if ( empty( $var1 ) ) throw new NotEmptyException();
    if ( empty( $var2 ) ) throw new NotEmptyException();
    if ( ! preg_match() ) throw new InvalidInputException();

    $model->write();
    $template->render( 'success' );
 
} catch ( NotEmptyException $e ) {

  $template->render( 'error_empty' );

} catch ( InvalidInputException $e ) {

  $template->render( 'error_preg' );

}

Exception 類的結(jié)構(gòu):其中大部分方法都是 禁止改寫的(final )

Exception {

/* 屬性 */

protected string $message ;

protected int $code ;

protected string $file ;

protected int $line ;

/* 方法 */

public __construct ([ string $message = "" [, int $code = 0 [, Exception $previous = null]]] )

final public string getMessage ( void ) //異常拋出的信息

final public Exception getPrevious ( void ) //前一異常

final public int getCode ( void ) //異常代碼,這是用戶自定義的

final public string getFile ( void ) //發(fā)生異常的文件路勁

final public int getLine ( void ) //發(fā)生異常的行

final public array getTrace ( void ) //異常追蹤信息(array)

final public string getTraceAsString ( void ) //異常追蹤信息(string)

public string __toString ( void ) //試圖直接 將異常對象當(dāng)作字符串使用時調(diào)用子函數(shù)的返回值

final private void __clone ( void ) //克隆異常對象時調(diào)用

}

擴(kuò)展異常類

try-catch 可以有多個 catch 子句,從第一個 catch 子句開始,如果子句內(nèi)的 異常變量 類型匹配 thrown 語句拋出的異常類型,則該子句會被執(zhí)行而不再執(zhí)行其他catch子句,否則繼續(xù)嘗試下一個 catch 子句,由于Exception 是所有 異常類的基類,因此拋出的異常都會與他匹配 ,如果你像個根據(jù)不同異常類型使用不同的處理方法,應(yīng)該將 Exception 類型的 catch 子句放到最后。 

Exception 是所有異常的基類,可以根據(jù)實際需要擴(kuò)展異常類,

calss MyException extends Exception{

   public errType = 'default';

   public function __construct($errType=''){

      $this->errType = $errType;

  }

}


thrown new MyException ();  //拋出一個異常

try{

  // you codes that maybe cause an error

}catch(MyException  $err){ // 這個錯誤對象需要聲明類型

    echo $err->errType();

}catch(ErrorException $err){ //ErrorException 是 PHP 5 增加的異常類,繼承于 Exception

    echo 'error !';

}catch(Exception $err){

     redirect('/error.php');

}

你可能會在 catch 子句中判斷異常的類型,或者根據(jù) code 等信息來決定是否處理異常,如果你卸載 catch 子句的代碼無法適當(dāng)?shù)奶幚聿东@的異常,你可以在 catch 子句內(nèi)繼續(xù) 拋出異常。

    相關(guān)評論

    閱讀本文后您有什么感想? 已有人給出評價!

    • 8 喜歡喜歡
    • 3 頂
    • 1 難過難過
    • 5 囧
    • 3 圍觀圍觀
    • 2 無聊無聊

    熱門評論

    最新評論

    發(fā)表評論 查看所有評論(0)

    昵稱:
    表情: 高興 可 汗 我不要 害羞 好 下下下 送花 屎 親親
    字?jǐn)?shù): 0/500 (您的評論需要經(jīng)過審核才能顯示)
    推薦文章

    沒有數(shù)據(jù)

      沒有數(shù)據(jù)
    最新文章
      沒有數(shù)據(jù)