PHP的異常處理

來源:互聯網
上載者:User

標籤:異常處理   apple   extend   dump   ext   elf   方法   sel   tle   

PHP 的異常處理

    1、 什麼是異常?

異常是指一個程式在運行過程出現的一個意外或者事件,中斷了正常指令的執行,跳轉到其他模組繼續執行。

     PHP 5 提供了一種新的物件導向的錯誤處理方法。
        異常處理用於在指定的錯誤(異常)情況發生時改變指令碼的正常流程。這種情況稱為異常。

當異常被觸發時,通常會發生:
            當前代碼狀態被儲存
            代碼執行被切換到預定義的異常處理器函數
            根據情況,處理器也許會從儲存的代碼狀態重新開始執行代碼,
            終止指令碼執行,或從代碼中另外的位置繼續執行指令碼
        我們將展示不同的錯誤處理方法:
            異常的基本使用
            建立自訂的異常處理器
            多個異常
            重新拋出異常
            設定頂層異常處理器    

2. 異常處理類
PHP具有很多異常處理類,其中Exception是所有異常處理的基類。
Exception::__clone — 異常複製{}
final private void Exception::__clone ( void )   嘗試複製異常,這將導致一個致命錯誤。 


Exception具有幾個基本屬性與方法,其中包括了:

message 異常訊息內容

 code 異常代碼
 file 拋出異常的檔案名稱
 line 拋出異常在該檔案的行數
其中常用的方法有:
getTrace 擷取異常追蹤資訊
 getTraceAsString 擷取異常追蹤資訊的字串
 getMessage 擷取出錯資訊


在PHP代碼中所產生的異常可被 throw 語句拋出並被 catch 語句捕獲。需要進行異常處理的代碼都必須放入到 try 代碼塊內,以便捕獲可能存在的異常。每個try至少對應一個 catch 塊。使用多個 catch 可以捕獲不同的類所產生的異常。當 try 代碼塊不再拋出異常或者找不到 catch 能匹配所拋出的異常時,PHP 代碼就會在跳轉到最後一個 catch 的後面繼續執行。當然,PHP 允許在 catch 代碼塊內再次拋出(throw)異常。

例如:

擴充(extend) PHP 內建的異常處理類
<?php/** * 自訂一個異常處理類 */class MyException extends Exception{    // 重定義構造器使 message 變為必須被指定的屬性    public function __construct($message, $code = 0, Exception $previous = null) {        // 自訂的代碼        // 確保所有變數都被正確賦值        parent::__construct($message, $code, $previous);    }    // 自訂字串輸出的樣式    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 is not allowed as a parameter‘, 6);                break;            default:                 // 沒有異常的情況下,建立一個對象                $this->var = $avalue;                break;        }    }}// 例子 1try {    $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;}// Continue executionvar_dump($o); // Nullecho "\n\n";// 例子 2try {    $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); // Nullecho "\n\n";// 例子 3try {    $o = new TestException(TestException::THROW_CUSTOM);} catch (Exception $e) {        // 捕獲異常    echo "Default Exception caught\n", $e;}// 執行後續代碼var_dump($o); // Nullecho "\n\n";// 例子 4try {    $o = new TestException();} catch (Exception $e) {        // 沒有異常,被忽略    echo "Default Exception caught\n", $e;}// 執行後續代碼var_dump($o); // TestExceptionecho "\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.