try...catch...語法
阿新 • • 發佈:2018-11-19
語法一定要簡練,最重要的是功能說明和使用案例!如下:
1、它是PHP5新增的類似於其它語言的異常處理模組;
2、需要進行異常處理的程式碼都必須放入 try 程式碼塊內,由 Exception $e 收集錯誤資訊,CATCH塊中,使用 $e 顯示和處理錯誤資訊;
3、儘管你的程式碼有bug,但你想讓它繼續執行而不報錯,就可以用 try...catch... 自己進行異常處理。
4、上面基本就夠用了,還不懂,請往下看個小例項:
複製程式碼程式碼如下: <?phptry {
$mgr = new CommandManager();
$cmd = $mgr->getCommandObject("realcommand"); //有錯誤的方法
$cmd->execute();
} catch (Exception $e) {
print $e->getMessage();
exit();
}
?>
想精通該語法,請往下繼續看例項:
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 的後面繼續執行。