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

更新日期: 2020-09-18

403 次浏览

开启你的 职业生涯

完成课程以获得认证

开始
广告
© . All rights reserved.