PHP 異常處理 - 帶 finally 塊
簡介
無論 try 程式碼塊是否出現異常,finally 程式碼塊中的程式碼始終都會執行。此程式碼塊要麼出現在 catch 程式碼塊之後,要麼代替 catch 程式碼塊。
catch 和 finally 程式碼塊
在以下示例中,同時提供了 catch 和 finally 程式碼塊。如果在 try 程式碼塊中發生異常,則執行這兩個程式碼塊中的程式碼。如果沒有異常,則僅執行 finally 程式碼塊。
示例
<?php function div($x, $y) { if (!$y) { throw new Exception('Division by zero.'); } return $x/$y; } try { echo div(10,0) . "
"; } catch (Exception $e) { echo 'Caught exception: ', $e->getMessage(), "
"; } finally{ echo "This block is always executed
"; } // Continue execution echo "Execution continues
"; ?>
輸出
顯示以下輸出
Caught exception: Division by zero. This block is always executed Execution continues
更改 try 程式碼塊中的語句,使其不發生異常
示例
<?php function div($x, $y) { if (!$y) { throw new Exception('Division by zero.'); } return $x/$y; } try { echo div(10,5) . "
"; } catch (Exception $e) { echo 'Caught exception: ', $e->getMessage(), "
"; } finally{ echo "This block is always executed
"; } // Continue execution echo "Execution continues
"; ?>
輸出
顯示以下輸出
2 This block is always executed Execution continues
僅 finally 程式碼塊
以下示例有兩個 try 程式碼塊。其中一個僅有 finally 程式碼塊。它的 try 程式碼塊呼叫引發異常的 div 函式
示例
<?php function div($x, $y){ try{ if (!$y) { throw new Exception('Division by zero.'); } return $x/$y; } catch (Exception $e) { echo 'Caught exception: ', $e->getMessage(), "
"; } } try { echo div(10,0) . "
"; } finally{ echo "This block is always executed
"; } // Continue execution echo "Execution continues
"; ?>
輸出
顯示以下輸出
Caught exception: Division by zero. This block is always executed Execution continues
廣告