php中try catch捕獲異常

2021-07-26 15:52:30 字數 2571 閱讀 5906

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

php5新增了類似於其它語言的異常處理模組。在 php **中所產生的異常可被 throw語句丟擲並被 catch 語句捕獲。(注:一定要先拋才能獲取)

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

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

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

當 try **塊不再丟擲異常或者找不到 catch 能匹配所丟擲的異常時,php **就會在跳轉到最後乙個 catch 的後面繼續執行。

當然,php允許在 catch **塊內再次丟擲(throw)異常。

當乙個異常被丟擲時,其後(譯者注:指丟擲異常時所在的**塊)的**將不會繼續執行,而 php 就會嘗試查詢第乙個能與之匹配的 catch。

如果乙個異常沒有**獲,而且又沒用使用 set_exception_handler() 作相應的處理的話,那麼 php 將會產生乙個嚴重的錯誤,並且輸出 uncaught exception … (未捕獲異常)的提示資訊。

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

**如下:

try

catch()

catch()

為了進一步處理異常,我們需要使用php中try{}catch{}—-包括try語句和至少乙個的catch語句。任何呼叫 可能丟擲異常的方法的**都應該使用try語句。catch語句用來處理可能丟擲的異常。以下顯示了我們處理getcommandobject()丟擲的異常的方法:

**如下:

<?php

try catch (exception

$e)

?>

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

如果丟擲了乙個異常,try語句中的指令碼將會停止執行,然後馬上轉向執行catch語句中的指令碼。

例子如下:

包含檔案錯誤丟擲異常

**如下:

<?php

// 錯誤的演示

try catch (exception

$e)

// 正確的丟擲異常

try else

} catch (exception

$e)

如果異常丟擲了卻沒有**捉到,就會產生乙個fatal error。

多個catch捕獲多個異常

php將查詢乙個匹配的catch**塊。如果有多個catch**塊,傳遞給每乙個catch**塊的物件必須具有不同型別,這樣php可以找到需要進入哪乙個catch**塊。當try**塊不再丟擲異常或者找不到catch能匹配所丟擲的異常時,php**就會在跳轉最後乙個catch的後面繼續執行。多個異常的捕獲的示例如下:

複製** **如下:

<?php

class

myexception

extends

exception

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

public

function

__tostring

() //為這個異常自定義乙個處理方法

public

function

customfunction

() }

//建立乙個用於測試自定義擴充套件的異常類myexception

class

testexception}}

//示例1,在沒有異常時,程式正常執行,try中的**全部執行並不會執行任何catch區塊

trycatch(myexception $e)catch(exception

$e) var_dump($testobj); //判斷物件是否建立成功,如果沒有任何異常,則建立成功

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

trycatch(myexception $e)catch(exception

$e) var_dump($testobj1); //有異常產生,這個物件沒有建立成功

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

trycatch(myexception $e)catch(exception

$e) var_dump($testobj2); //有異常產生,這個物件沒有建立成功

?>

在上面的**中,可以使用兩個異常處理類:乙個是自定義的異常處理類myexception;另乙個則是php中內建的異常處理類exception。分別在try區塊中建立測試類testexception的物件,並根據構造方法中提供的不同數字引數,拋出自定義異常類物件、內建的異常類物件和不丟擲任何異常的情況,跳轉到對應的catch區塊中執行。如果沒有異常發生,則不會進入任何乙個catch塊中執行,測試類testexception的物件建立成功

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

php中try catch 語句概述 php5新增了類似於其它語言的異常處理模組。在 php 中所產生的異常可被 throw語句丟擲並被 catch 語句捕獲。注 一定要先拋才能獲取 需要進行異常處理的 都必須放入 try 塊內,以便捕獲可能存在的異常。每乙個 try 至少要有乙個與之對應的 cat...

C 中的try catch異常捕獲

try catch 這和括號裡面的引數是表示的這個catch語句裡面要對應處理的錯誤型別及其引數 finally 然後再程式 a中我們可以寫乙個 catch 語句來截獲這個錯誤,並作出相應的處理 catch indexoutofrangeexceptione 錯誤的種類 算術異常類 arithmet...

try catch捕獲不同的異常

目的 想要使用try.catch捕獲不同的異常 eg1 建立三個exception class aexception extends exception class bexception extends exception class cexception extends exception 乙個t...