1. 程式人生 > 實用技巧 >php try{} catch{}異常處理

php try{} catch{}異常處理

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();
}

  執行結果如下