我用下面的代碼混淆困惑:當前PHP異常在try..catch築巢
class MyException extends Exception {}
class AnotherException extends MyException {}
class Foo {
public function something() {
print "throwing AnotherException\n";
throw new AnotherException();
}
public function somethingElse() {
print "throwing MyException\n";
throw new MyException();
}
}
$a = new Foo();
try {
try {
$a->something();
} catch(AnotherException $e) {
print "caught AnotherException\n";
$a->somethingElse();
} catch(MyException $e) {
print "caught MyException\n";
}
} catch(Exception $e) {
print "caught Exception\n";
}
我希望它可以輸出:
throwing AnotherException
caught AnotherException
throwing MyException
caught MyException
而是將其輸出:
throwing AnotherException
caught AnotherException
throwing MyException
caught Exception
任何人都可以解釋爲什麼它「跳過」catch(MyException $ e)?
謝謝。
我只是想成爲確定我們在同一頁面......基本上他應該在第一個「catch」之後添加另一個'try',對吧?那麼,因爲整個事物都嵌入了更大的嘗試,他會得到3套例外?從本質上講,它永遠不會捕獲第二個異常,因爲它從不嘗試? – Anthony 2010-04-06 16:57:50
如果他有,或者將外部'catch'改爲「MyException」而不是「Exception」,這是否會引發「MyException」'throw'?他的嘗試是否觸發「MyException」的'throw'的問題,但是因爲嘗試不是由'try'啓動的,catch'從不會發生?換句話說,「MyException」仍然在那裏被第三個「catch」抓住了嗎? – Anthony 2010-04-06 17:03:16
@Anthony,re:第一條評論:是的,如果他添加了第三層的try塊,那將是一個解決方案。雖然有點雜亂。我不會選擇像上一句話那樣描述問題的特徵,但它不是錯誤的*。 – Oddthinking 2010-04-07 00:03:10