[英]PHP try catch block syntax
一個沒有太多經驗的人提出的一個非常簡單的問題。 以下try catch塊包含“(Exception $ e)”部分:這類似於sql,其中$ e成為Exception的別名? 如果是這樣,這種別名分配類型是否在php的其他地方使用,因為我還沒有遇到過? 我已經搜索了幾個小時,但無法在網上找到解釋。
function inverse($x) {
if (!$x) {
throw new Exception('Division by zero.');
}
else return 1/$x;
}
try {
echo inverse(5) . "<br/>";
echo inverse(0) . "<br/>";
} catch (Exception $e) {
echo 'Caught exception: ', $e->getMessage(), "<br/>";
}
echo 'Hello World';
您提到的是過濾器構造。 它類似於其他聲明性語言中的聲明。 但是實際上它具有不同的含義。 實際上,php沒有顯式聲明的概念(這很可惜...)。
看一下這個例子:
function my_func($x) {
try {
/* do something */
if (1===$x)
throw new SpecialException('x is 1.');
else if (is_numeric($x)) }
throw new SpecialException('x is numeric.');
else return $x;
}
catch (SpecialException $e) {
echo "This is a special exception!";
/* do something with object $e of type SpecialException */
}
catch (Exception $e) {
echo "This is a normal exception!";
/* do something with object $e of type SpecialException */
}
}
在這里可以清楚知道構造的用途:它按異常類型過濾掉。 因此,可以將執行幾個catch塊中的哪個問題的問題歸結為引發的異常類型。 在需要時,這允許非常精細的異常處理。 沒有這種功能,只有一個catch塊是合法的,並且您必須對每個catch塊中的潛在異常類型實施條件測試。 該功能使代碼更具可讀性,盡管它在php語法中有所突破。
您不必這樣做,但是您可以創建自己的具有特殊行為的異常類,更重要的是,可以接受並攜帶有關實際情況的更多信息。
是OO PHP。 $ e是異常對象的實例。
$ e可以很容易地被標記為其他任何東西,只要您要獲取消息等在它上面被引用即可。
例如;
try {
echo inverse(5) . "<br/>";
echo inverse(0) . "<br/>";
} catch (Exception $oops) {
echo 'Caught exception: ', $oops->getMessage(), "<br/>";
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.