有兩個理由讓我們想要從
exception
類中派生中子類: 1.
讓子類提供自定義的功能; 2.
區分不同型別的異常;
看第二個例子。使用
commandmanager
類時
我們可能會產生兩個錯誤:乙個是一般性的錯誤如找不到目錄,另乙個是找不到或無法生成
command
物件。
這樣我們需要針對這兩個錯誤來定義兩種異常子型別。
index_php5_4.php
<?php
// php 5
require_once(
'cmd_php5/command.php'
);
class
commandmanagerexception
extends
exception
{}
class
illegalcommandexception
extends
exception
{}
class
commandmanager
}
function
getcommandobject
(
$cmd
) /.php"
;
if (!
file_exists
(
$path
))
require_once
$path
;
if (!
class_exists
(
$cmd
))
$class
= new
reflectionclass
(
$cmd
);
if (!
$class
->
issubclassof
(new
reflectionclass
(
'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...