PHP 中 finally 和 return 的交互


导言

当 try 块或 catch 块(或两者)包含一个 return 语句时,finally 块会呈现出一种特殊的行为。通常,return 语句会使程序控制权返回到调用位置。但是,对于带有 try/catch 块且带 return 的函数,finally 块中的语句会在返回前先执行。

示例

在以下示例中,div() 函数有一个 try - catch - finally 结构。没有异常的 try 块会返回除法运算结果。在异常情况下,catch 块会返回错误消息。但是,在这两种情况下,finally 块中的语句都会先执行。

示例

 在线演示

<?php
function div($x, $y){
   try {
      if ($y==0)
         throw new Exception("Division by 0");
      else
         $res=$x/$y;;
         return $res;
      }
      catch (Exception $e){
         return $e->getMessage();
      }
      finally{
         echo "This block is always executed
";    } } $x=10; $y=0; echo div($x,$y); ?>

输出

会显示以下输出

This block is always executed
Division by 0

将 $y 的值变为 5。 会显示以下输出

This block is always executed
2

更新于: 18-Sep-2020

1K+ 浏览

开启你的 职业生涯

完成课程即可获得认证。

开始学习
广告