這個問題是關於對try塊外運行的代碼只有在沒有拋出異常的最好的辦法。乾淨的方法只有在沒有拋出異常
try {
//experiment
//can't put code after experiment because I don't want a possible exception from this code to be caught by the following catch. It needs to bubble.
} catch(Exception $explosion) {
//contain the blast
} finally {
//cleanup
//this is not the answer since it executes even if an exception occured
//finally will be available in php 5.5
} else {
//code to be executed only if no exception was thrown
//but no try ... else block exists in php
}
這方法通過@webbiedave響應於問題php try .. else建議。我發現它不令人滿意,因爲使用了額外的$caught
變量。
$caught = false;
try {
// something
} catch (Exception $e) {
$caught = true;
}
if (!$caught) {
}
那麼什麼是更好的(或最好的)方式來完成這個,而不需要額外的變量呢?
把它放在try塊。如果它可能拋出另一個你不想被外部try塊捕獲的異常,那麼使用一個嵌套的try-catch來捕獲該異常。但請注意,您不會將異常用作流量控制。 – ssube
@peachykeen這將無法正常工作,因爲異常需要冒泡。 –
聽起來很像你使用異常來控制執行過多。你確定你需要扔磚塊和後面的冒泡嗎?很可能的是,例外*應該被變量和適當的流量控制所取代。 – ssube