使用 finally 处理 PHP 异常

phpserver side programmingprogramming更新于 2025/7/19 4:22:17

简介

无论 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

相关文章