日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > php >内容正文

php

php try 中 抛出异常处理,php中try catch捕获异常实例详解

發(fā)布時間:2025/4/16 php 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 php try 中 抛出异常处理,php中try catch捕获异常实例详解 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

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

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

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

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

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

使用多個 catch可以捕獲不同的類所產(chǎn)生的異常。

當 try 代碼塊不再拋出異常或者找不到 catch 能匹配所拋出的異常時,PHP 代碼就會在跳轉(zhuǎn)到最后一個 catch 的后面繼續(xù)執(zhí)行。

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

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

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

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

復制代碼 代碼如下: try{

}

catch(){

throw new Exception();

}

catch(){

//這里可以捕獲到前面一個塊拋出的Exception

}

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

復制代碼 代碼如下: try {

$mgr = new CommandManager();

$cmd = $mgr->getCommandObject("realcommand");

$cmd->execute();

} catch (Exception $e) {

print $e->getMessage();

exit();

}

?>

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

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

例子如下:

包含文件錯誤拋出異常

復制代碼 代碼如下: // 錯誤的演示

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

}

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

多個catch捕獲多個異常

PHP將查詢一個匹配的catch代碼塊。如果有多個catch代碼塊,傳遞給每一個catch代碼塊的對象必須具有不同類型,這樣PHP可以找到需要進入哪一個catch代碼塊。當try代碼塊不再拋出異常或者找不到catch能匹配所拋出的異常時,PHP代碼就會在跳轉(zhuǎn)最后一個catch的后面繼續(xù)執(zhí)行。多個異常的捕獲的示例如下:

復制代碼 代碼如下: class MyException extends Exception{

//重定義構(gòu)造器使第一個參數(shù)message變?yōu)楸仨毐恢付ǖ膶傩?/p>

public function __construct($message, $code=0){

//可以在這里定義一些自己的代碼

//建議同時調(diào)用parent::construct()來檢查所有的變量是否已被賦值

parent::__construct($message, $code);

}

//重寫父類中繼承過來的方法,自定義字符串輸出的樣式

public function __toString(){

return __CLASS__.":[".$this->code."]:".$this->message."

";

}

//為這個異常自定義一個處理方法

public function customFunction(){

echo "按自定義的方法處理出現(xiàn)的這個類型的異常";

}

}

//創(chuàng)建一個用于測試自定義擴展的異常類MyException

class TestException{

public $var; //用來判斷對象是否創(chuàng)建成功的成員屬性

function __construct($value=0){ //通過構(gòu)造方法的傳值決定拋出的異常

switch($value){ //對傳入的值進行選擇性的判斷

case 1: //摻入?yún)?shù)1,則拋出自定義的異常對象

throw new MyException("傳入的值“1”是一個無效的參數(shù)",5);break;

case 2: //傳入?yún)?shù)2,則拋出PHP內(nèi)置的異常對象

throw new MyException("傳入的值“2”不允許作為一個參數(shù)",6);break;

default: //傳入?yún)?shù)合法,則不拋出異常

$this->var=$value;break; //為對象中的成員屬性賦值

}

}

}

//示例1,在沒有異常時,程序正常執(zhí)行,try中的代碼全部執(zhí)行并不會執(zhí)行任何catch區(qū)塊

try{

$testObj =new TestException(); //使用默認參數(shù)創(chuàng)建異常的擦拭類對象

echo "********

"; //沒有拋出異常這條語句就會正常執(zhí)行

}catch(MyException $e){ //捕獲用戶自定義的異常區(qū)塊

echo "捕獲自定義的異常:$e

"; //按自定義的方式輸出異常消息

$e->customFunction(); //可以調(diào)用自定義的異常處理方法

}catch(Exception $e){ //捕獲PHP內(nèi)置的異常處理類的對象

echo "捕獲默認的異常:".$e->getMessage()."

"; //輸出異常消息

}

var_dump($testObj); //判斷對象是否創(chuàng)建成功,如果沒有任何異常,則創(chuàng)建成功

//示例2,拋出自定義的異常,并通過自定義的異常處理類捕獲這個異常并處理

try{

$testObj1 =new TestException(1); //傳1時,拋出自定義異常

echo "********

"; //這個語句不會被執(zhí)行

}catch(MyException $e){ //這個catch區(qū)塊中的代碼將被執(zhí)行

echo "捕獲自定義的異常:$e

";

$e->customFunction();

}catch(Exception $e){ //這個catch區(qū)塊不會執(zhí)行

echo "捕獲默認的異常:".$e->getMessage()."

";

}

var_dump($testObj1); //有異常產(chǎn)生,這個對象沒有創(chuàng)建成功

//示例2,拋出自內(nèi)置的異常,并通過自定義的異常處理類捕獲這個異常并處理

try{

$testObj2 =new TestException(2); //傳入2時,拋出內(nèi)置異常

echo "********

"; //這個語句不會被執(zhí)行

}catch(MyException $e){ //這個catch區(qū)塊中的代碼將被執(zhí)行

echo "捕獲自定義的異常:$e

";

$e->customFunction();

}catch(Exception $e){ //這個catch區(qū)塊不會執(zhí)行

echo "捕獲默認的異常:".$e->getMessage()."

";

}

var_dump($testObj2); //有異常產(chǎn)生,這個對象沒有創(chuàng)建成功

?>

相關報道:

在過去,我們?nèi)绻朐赪eb上播放視頻,也是都是通過Flash來播放,同樣并不是所有的 瀏覽器 都安裝了Flash播放器插件,而現(xiàn)在我們在HTML5中,就能完全脫離Flash或其他的插件來播放視頻了 1、視頻格式的簡單介紹 視頻格式:avi、rmb、wmv、mpeg4、ogg、webm 視 更多

DNS是網(wǎng)絡應用的基礎設施,它的安全性對于互聯(lián)網(wǎng)的安全有著舉足輕重的影響。對于經(jīng)常使用電腦或者信息設備的人來說,經(jīng)常會在網(wǎng)絡設置中看到DNS。但是對于普通大眾來說,DNS是非常陌生的。而在這個信息技術(shù)和互聯(lián)網(wǎng)飛速發(fā)展的時代,陌生和不熟悉就意味不安全 更多

總結(jié)

以上是生活随笔為你收集整理的php try 中 抛出异常处理,php中try catch捕获异常实例详解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。