PHP5的異常處理機制

2021-04-20 12:03:45 字數 4805 閱讀 9994

有兩個理由讓我們想要從

exception

類中派生中子類: 1.

讓子類提供自定義的功能; 2.

區分不同型別的異常;

看第二個例子。使用

commandmanager類時

我們可能會產生兩個錯誤:乙個是一般性的錯誤如找不到目錄,另乙個是找不到或無法生成

command物件。

這樣我們需要針對這兩個錯誤來定義兩種異常子型別。

index_php5_4.php

<?php

// php 5

require_once('cmd_php5/command.php');

classcommandmanagerexceptionextendsexception{}

classillegalcommandexceptionextendsexception{}

classcommandmanager

}

functiongetcommandobject($cmd) /.php";

if (!file_exists($path))

require_once$path;

if (!class_exists($cmd))

$class= newreflectionclass($cmd);

if (!$class->issubclassof(newreflectionclass('command')))

return$class->newinstance();

}

}

?>

當我們的類不能找到正確的

command

目錄時,將丟擲乙個commandmanagerexception異常;當在生成command物件時產生錯誤,則getcommandobject()方法將丟擲乙個illegalcommandexception異常。注意存在多個可能導致丟擲illegalcommandexception異常的原因(如未找到檔案,或在檔案中未找到正確的類)。我們將前兩個例子結合起來並為illegalcommandexception提供整型的錯誤標識常量來代表不同型別的出錯原因。

現在commandmanager類已經具備了處理這多種出錯情況的能力,我們可以增加新的catch語句來匹配不同的錯誤型別

index_php5_4.php後半段

<?php

// php 5

try catch (commandmanagerexception $e) catch (illegalcommandexception $e) catch (exception $e)

?>

如果commandmanager物件丟擲乙個commandmanagerexception異常,則相對應的catch語句將會執行。每個catch語句的引數就像是乙個匹配測試一樣,第乙個發生匹配的catch語句將會執行,而不執行其它的catch語句。所以,你應當將針對特定異常的catch語句寫在前面,而將針對一般性的異常的catch語句寫在後面。

如果你將catch語句這樣寫:

<?php

// php 5

try catch (exception $e) catch (commandmanagerexception $e) catch (illegalcommandexception $e)

?>

那麼當異常丟擲時,不管是什麼異常第乙個

catch

語句catch (exception $e){}將總是被執行。這是由於任何異常都從屬於exception型別,所以總是匹配。這就達不到我們所要的針對特定異常進行不同處理的目的。

如果你在捕捉特定型別的異常,那麼在最後乙個catch語句中捕捉

exception

型別的異常是乙個好主意。最後乙個

catch

語句表示

catch-all

,捕捉所有異常。當然,你可能不想馬上處理異常,而是想要將它傳遞,然後在適當的時候處理。這是

php的異常機制中另乙個需要討論的地方。  

PHP5的異常處理機制之使用throw關鍵字

建立乙個exception物件後你可以將物件返回,但不應該這樣使用,更好的方法是用throw關鍵字來代替。throw用來丟擲異常 throw new exception my message 44 throw 將指令碼的執行中止,並使相關的exception物件對客戶 可用。以下是改進過的getco...

PHP5的異常處理機制 1 本文索引

matt zandstra 翻譯 簡介在php5之前的錯誤處理 使用die 或trigger error 返回錯誤標記 使用pear處理錯誤 php5的異常機制 使用throw關鍵字 try catch語句 處理多個錯誤 自定義異常型別 異常的傳遞 更多異常的相關資訊 總結關於作者 本文面向的讀者 ...

php異常處理機制

異常的規則 需要進行異常處理的 應該放入 try 塊內,以便捕獲潛在的異常。每個 try 或 throw 塊必須至少擁有乙個對應的 catch 塊。使用多個 catch 塊可以捕獲不同種類的異常。可以在 try 塊內的 catch 塊中丟擲 再次丟擲 異常。簡而言之 如果丟擲了異常,就必須捕獲它。1...