亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > PHP > 正文

php中try catch捕獲異常實例詳解

2024-05-04 23:27:47
字體:
來源:轉載
供稿:網友
這篇文章主要介紹了php中try catch捕獲異常的用法,以實例形式詳細分析了捕獲一個異常與捕獲多個異常的方法,有助于更好的處理一些不必要的錯誤,具有一定的實用價值,需要的朋友可以參考下
 
 

本文實例講述了php中try catch捕獲異常。分享給大家供大家參考。具體方法分析如下:

php中try catch可以幫助我們捕獲程序代碼的異常了,這樣我們可以很好的處理一些不必要的錯誤了,感興趣的朋友可以一起來看看。

PHP中try{}catch{}語句概述

PHP5添加了類似于其它語言的異常處理模塊。在 PHP 代碼中所產生的異??杀?throw語句拋出并被 catch 語句捕獲。(注:一定要先拋才能獲?。?/p>

需要進行異常處理的代碼都必須放入 try 代碼塊內,以便捕獲可能存在的異常。

每一個 try 至少要有一個與之對應的 catch。

使用多個 catch可以捕獲不同的類所產生的異常。

當 try 代碼塊不再拋出異?;蛘哒也坏?catch 能匹配所拋出的異常時,PHP 代碼就會在跳轉到最后一個 catch 的后面繼續執行。

當然,PHP允許在 catch 代碼塊內再次拋出(throw)異常。

當一個異常被拋出時,其后(譯者注:指拋出異常時所在的代碼塊)的代碼將不會繼續執行,而 PHP 就會嘗試查找第一個能與之匹配的 catch。

如果一個異常沒有被捕獲,而且又沒用使用 set_exception_handler() 作相應的處理的話,那么 PHP 將會產生一個嚴重的錯誤,并且輸出 Uncaught Exception ... (未捕獲異常)的提示信息。

先來看一下PHP內置異常類的基本屬性和方法。(不包括具體實現)

復制代碼代碼如下:
try{
}
catch(){
throw new Exception();
}
catch(){
//這里可以捕獲到前面一個塊拋出的Exception
}

 

為了進一步處理異常,我們需要使用PHP中try{}catch{}----包括Try語句和至少一個的catch語句。任何調用 可能拋出異常的方法的代碼都應該使用try語句。Catch語句用來處理可能拋出的異常。以下顯示了我們處理getCommandObject()拋出的異常的方法:

復制代碼代碼如下:
<?php
try {
$mgr = new CommandManager();
$cmd = $mgr->getCommandObject("realcommand");
$cmd->execute();
} catch (Exception $e) {
print $e->getMessage();
exit();
}
?>

可以看到,通過結合使用throw關鍵字和PHP中try{}catch{},我們可以避免錯誤標記“污染”類方法返回的值。因為“異常”本身就是一種與其它任何對象不同的PHP內建的類型,不會產生混淆。

 

如果拋出了一個異常,try語句中的腳本將會停止執行,然后馬上轉向執行catch語句中的腳本。

例子如下:

包含文件錯誤拋出異常

復制代碼代碼如下:
<?php
// 錯誤的演示
try {
require ('test_try_catch.php');
} catch (Exception $e) {
echo $e->getMessage();
}

 

// 正確的拋出異常
try {
if (file_exists('test_try_catch.php')) {
require ('test_try_catch.php');
} else {
throw new Exception('file is not exists');
}
} catch (Exception $e) {
echo $e->getMessage();
}


如果異常拋出了卻沒有被捕捉到,就會產生一個fatal error。

 

多個catch捕獲多個異常

PHP將查詢一個匹配的catch代碼塊。如果有多個catch代碼塊,傳遞給每一個catch代碼塊的對象必須具有不同類型,這樣PHP可以找到需要進入哪一個catch代碼塊。當try代碼塊不再拋出異?;蛘哒也坏絚atch能匹配所拋出的異常時,PHP代碼就會在跳轉最后一個catch的后面繼續執行。多個異常的捕獲的示例如下:

復制代碼代碼如下:
<?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);        //有異常產生,這個對象沒有創建成功
?>

 

在上面的代碼中,可以使用兩個異常處理類:一個是自定義的異常處理類MyException;另一個則是PHP中內置的異常處理類Exception。分別在try區塊中創建測試類TestException的對象,并根據構造方法中提供的不同數字參數,拋出自定義異常類對象、內置的異常類對象和不拋出任何異常的情況,跳轉到對應的catch區塊中執行。如果沒有異常發生,則不會進入任何一個catch塊中執行,測試類TestException的對象創建成功

希望本文所述對大家的php程序設計有所幫助。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
91精品啪在线观看麻豆免费| 国产一区二区三区网站| 成人中文字幕+乱码+中文字幕| 96国产粉嫩美女| 国产一区二区三区丝袜| 亚洲色图狂野欧美| 精品毛片三在线观看| 久久久亚洲福利精品午夜| 51午夜精品视频| 黑丝美女久久久| 中文字幕9999| 91久久国产综合久久91精品网站| 亚洲欧洲在线观看| 亚洲成色777777女色窝| 亚洲新声在线观看| 日韩精品999| 欧美精品免费看| 国产精品都在这里| 国产精品极品在线| 国产成+人+综合+亚洲欧美丁香花| 国产午夜精品视频| 欧美日韩国产丝袜另类| 91精品啪在线观看麻豆免费| 欧美成人四级hd版| 青青久久av北条麻妃黑人| 日产精品99久久久久久| 91国偷自产一区二区三区的观看方式| 久久精品小视频| 日韩欧美国产激情| 亚洲经典中文字幕| 国产精品中文字幕在线| 亚洲国产精品成人精品| 亚洲精品按摩视频| 国产精品视频色| 久久视频在线播放| 国产+成+人+亚洲欧洲| 中文字幕无线精品亚洲乱码一区| 久久久久久久久久久91| 久久亚洲电影天堂| 日本成人免费在线| 2019最新中文字幕| 亚洲老板91色精品久久| 在线播放国产一区中文字幕剧情欧美| 国产成人精品免费久久久久| 成人午夜一级二级三级| 亚洲人精品午夜在线观看| 日韩精品黄色网| 26uuu久久噜噜噜噜| 欧美日韩国产一区中文午夜| 国产成人一区二区在线| 人人做人人澡人人爽欧美| 在线电影欧美日韩一区二区私密| 成人久久精品视频| 欧美黑人xxxⅹ高潮交| 国产精品国内视频| 7m精品福利视频导航| 国产精品中文字幕久久久| 亚洲精品视频中文字幕| 久久久久国色av免费观看性色| 日日狠狠久久偷偷四色综合免费| 欧美日韩爱爱视频| 欧美成人sm免费视频| 69视频在线播放| 日韩免费看的电影电视剧大全| 欧美日韩成人黄色| 国产视频丨精品|在线观看| 性欧美在线看片a免费观看| 日韩成人久久久| 怡红院精品视频| 日韩三级影视基地| 日韩一区二区三区在线播放| 一本一本久久a久久精品牛牛影视| 国产精品成熟老女人| 成人在线小视频| 亚洲精品一区二三区不卡| 国产精品丝袜一区二区三区| 在线精品播放av| 亚洲男人的天堂在线| 一区二区成人精品| 在线国产精品播放| 羞羞色国产精品| 亚洲黄色www| 亚洲精品国产精品久久清纯直播| 青草青草久热精品视频在线网站| 久久亚洲欧美日韩精品专区| 91香蕉亚洲精品| 亚洲国产精品专区久久| 亚洲视频自拍偷拍| 欧美亚洲第一页| 亚洲娇小xxxx欧美娇小| 日韩精品一二三四区| 日韩中文字幕在线视频播放| 午夜精品视频在线| 一本一本久久a久久精品牛牛影视| 成人网在线免费观看| 亚洲香蕉av在线一区二区三区| 国产精品三级美女白浆呻吟| 亚洲国产精品悠悠久久琪琪| 日韩美女视频免费在线观看| 久久久91精品国产| 这里只有精品视频在线| 日韩高清欧美高清| 91精品国产电影| 欧美一级在线亚洲天堂| 日韩欧美在线免费观看| 亚洲аv电影天堂网| 亚洲精品丝袜日韩| 97婷婷涩涩精品一区| 欧美亚洲国产日韩2020| 国外色69视频在线观看| 欧美在线视频在线播放完整版免费观看| 亚洲第一色中文字幕| 亚洲国内高清视频| 在线视频精品一| 亚洲成av人片在线观看香蕉| 91视频88av| 日韩美女福利视频| 亚洲人成电影网站| 国产精品女人网站| 精品国产自在精品国产浪潮| 欧美精品激情视频| 亚洲国产天堂久久综合网| 在线午夜精品自拍| 国产精品国产亚洲伊人久久| 尤物yw午夜国产精品视频| 欧美综合国产精品久久丁香| 一夜七次郎国产精品亚洲| 中文字幕日韩欧美精品在线观看| xxx欧美精品| 久久99久国产精品黄毛片入口| 97成人精品视频在线观看| 国产精品三级在线| 国产成人在线一区二区| 亚洲欧美在线看| 亚洲国产精品久久久| 国产不卡av在线| 亚洲女人天堂av| 国产成人午夜视频网址| 九九九热精品免费视频观看网站| 免费91麻豆精品国产自产在线观看| 欧美成人亚洲成人| 久久成人av网站| 国产精品免费久久久久久| 久久久国产精品免费| 欧美疯狂做受xxxx高潮| 国产精品永久免费视频| 欧美xxxx做受欧美.88| 国产精品久久77777| 欧美日韩一区二区在线| 疯狂欧美牲乱大交777| 国产中文日韩欧美| 国产噜噜噜噜久久久久久久久| 欧美精品在线极品| 热门国产精品亚洲第一区在线| 日本久久久a级免费| 亚洲乱亚洲乱妇无码| 国产成人av在线播放| 亚洲国产小视频| 欧美区在线播放| 亚洲一区中文字幕| 国产精品爽黄69天堂a| 久久亚洲影音av资源网| 欧美日韩中文字幕在线视频| 欧美电影免费观看电视剧大全|