1. 程式人生 > >try...catch...語法

try...catch...語法

語法一定要簡練,最重要的是功能說明和使用案例!如下:

1、它是PHP5新增的類似於其它語言的異常處理模組;

2、需要進行異常處理的程式碼都必須放入 try 程式碼塊內,由 Exception $e 收集錯誤資訊,CATCH塊中,使用 $e 顯示和處理錯誤資訊;

3、儘管你的程式碼有bug,但你想讓它繼續執行而不報錯,就可以用 try...catch... 自己進行異常處理。

4、上面基本就夠用了,還不懂,請往下看個小例項:

複製程式碼程式碼如下: <?php
try {
$mgr = new CommandManager(); 
$cmd = $mgr->getCommandObject("realcommand");    //有錯誤的方法
$cmd->execute();
} catch (Exception $e) {
print $e->getMessage();
exit();
}
?>

想精通該語法,請往下繼續看例項:

複製程式碼程式碼如下: <?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 "按自定義的方法處理出現的這個型別的異常";
           }
    }
 
    //建立一個用於測試自定義擴充套件的異常類MyException
    class TestException{
        public $var;           //用來判斷物件是否建立成功的成員屬性
        function __construct($value=0){              //通過構造方法的傳值決定丟擲的異常
            switch($value){                          //對傳入的值進行選擇性的判斷
                case 1:                              //摻入引數1,則丟擲自定義的異常物件
                    throw new MyException("傳入的值“1”是一個無效的引數",5);break;
                case 2:                              //傳入引數2,則丟擲PHP內建的異常物件
                    throw new MyException("傳入的值“2”不允許作為一個引數",6);break;
                default:                             //傳入引數合法,則不丟擲異常
                    $this->var=$value;break;          //為物件中的成員屬性賦值
            }
        }
    }
 
    //示例1,在沒有異常時,程式正常執行,try中的程式碼全部執行並不會執行任何catch區塊
    try{
        $testObj =new TestException();           //使用預設引數建立異常的擦拭類物件
        echo "********<br>";                     //沒有丟擲異常這條語句就會正常執行
    }catch(MyException $e){                      //捕獲使用者自定義的異常區塊
        echo "捕獲自定義的異常:$e<br>";          //按自定義的方式輸出異常訊息
        $e->customFunction();                    //可以呼叫自定義的異常處理方法
    }catch(Exception $e){                        //捕獲PHP內建的異常處理類的物件
        echo "捕獲預設的異常:".$e->getMessage()."<br>";       //輸出異常訊息
    }
    var_dump($testObj);        //判斷物件是否建立成功,如果沒有任何異常,則建立成功
 
    //示例2,丟擲自定義的異常,並通過自定義的異常處理類捕獲這個異常並處理
    try{
        $testObj1 =new TestException(1);         //傳1時,丟擲自定義異常
        echo "********<br>";                     //這個語句不會被執行
    }catch(MyException $e){                      //這個catch區塊中的程式碼將被執行
        echo "捕獲自定義的異常:$e<br>";          
        $e->customFunction();                    
    }catch(Exception $e){                        //這個catch區塊不會執行
        echo "捕獲預設的異常:".$e->getMessage()."<br>";       
    }
    var_dump($testObj1);        //有異常產生,這個物件沒有建立成功
 
    //示例2,丟擲自內建的異常,並通過自定義的異常處理類捕獲這個異常並處理
    try{
        $testObj2 =new TestException(2);         //傳入2時,丟擲內建異常
        echo "********<br>";                     //這個語句不會被執行
    }catch(MyException $e){                      //這個catch區塊中的程式碼將被執行
        echo "捕獲自定義的異常:$e<br>";          
        $e->customFunction();                    
    }catch(Exception $e){                        //這個catch區塊不會執行
        echo "捕獲預設的異常:".$e->getMessage()."<br>";       
    }
    var_dump($testObj2);        //有異常產生,這個物件沒有建立成功
?>

5、例項講解:

(1)如果丟擲了一個異常,try語句中的指令碼將會停止執行,然後馬上轉向執行catch語句中的指令碼;

(2)當 try 程式碼塊沒有丟擲異常,PHP 程式碼就會在跳轉到最後一個 catch 的後面繼續執行。