php try{} catch{}異常處理
阿新 • • 發佈:2020-12-11
1.使用方法:可能出錯的程式碼放在try裡面->丟擲異常->捕捉異常並處理
Exception()是系統內建的類,可以直接使用
<?php try{ $a=false; //會出錯的程式碼 if($a==false){ throw new Exception("出錯了..."); //將提示資訊放進去 } } catch(Exception $e) { //此處表示呼叫Exception的異常處理類,也可以自定義異常處理類 echo $e->getMessage(); //獲取提示資訊 }
注意:異常只有被丟擲了,才會被捕捉,如果沒有被丟擲,則直接會報錯,例如:
<?php try{ require "test.php"; //此處會直接報錯 } catch(Exception $e) { echo $e->getMessage(); }
只有將異常丟擲才會被捕捉
<?php try{ $file="test.php"; if(file_exists($file)){ require "test.php"; } else { throw new Exception("檔案:".$file."不存在!"); } } catch(Exception $e) { echo $e->getMessage(); }
2.自己編寫異常處理類,並繼承Exception
<?php //自定義的異常處理類 繼承異常基類 class Myexception extends Exception { public $_errorMessage=""; public function __construct($str){ $this->_errorMessage=$str; } //自定義的異常處理方法 public function getStr(){ return $this->_errorMessage; } } try{ $age="100"; if($age > 60){ throw new Myexception("年齡大於60"); //向Myexception丟擲異常 } } catch(Myexception $e) { //被捕捉 echo $e->getStr(); }
執行結果如下
3.異常的巢狀和向上層傳遞
巢狀
<?php //自定義的異常處理類 繼承異常基類 class Myexception extends Exception { public $_errorMessage=""; public function __construct($str){ $this->_errorMessage=$str; } //自定義的異常處理方法 public function getStr(){ return $this->_errorMessage; } } try{ $age="59"; if($age > 60){ throw new Myexception("年齡大於60"); //向Myexception丟擲異常 } else { throw new Exception("年齡小於60"); //向Exception丟擲異常 } } catch(Myexception $e) { echo $e->getStr(); } catch(Exception $e) { //被捕捉 echo $e->getMessage(); }
執行結果如下
異常向上層傳遞,程式碼如下
<?php //自定義的異常處理類 繼承異常基類 class Myexception extends Exception { public $_errorMessage=""; public function __construct($str){ $this->_errorMessage=$str; } //自定義的異常處理方法 public function getStr(){ return $this->_errorMessage; } } try{ $age="100"; try{ if($age>60){ throw new Exception("年齡大於60"); //向Exception丟擲異常 } } catch(Exception $a){ //被Exception捕捉 throw new Myexception($a->getMessage()); //向Myexception丟擲異常 } } catch (Myexception $e){ //被Myexception捕捉 echo $e->getStr(); }
執行結果如下