首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在PHP中‘finally`关键字是用来做什么的?

在PHP中‘finally`关键字是用来做什么的?
EN

Stack Overflow用户
提问于 2013-06-25 16:50:21
回答 3查看 3.1K关注 0票数 20

考虑这两个例子

代码语言:javascript
复制
<?php
function throw_exception() {
    // Arbitrary code here
    throw new Exception('Hello, Joe!');
}

function some_code() {
    // Arbitrary code here
}

try {
    throw_exception();
} catch (Exception $e) {
    echo $e->getMessage();
}

some_code();

// More arbitrary code
?>

代码语言:javascript
复制
<?php
function throw_exception() {
    // Arbitrary code here
    throw new Exception('Hello, Joe!');
}

function some_code() {
    // Arbitrary code here
}

try {
    throw_exception();
} catch (Exception $e) {
    echo $e->getMessage();
} finally {
    some_code();
}

// More arbitrary code
?>

有什么关系呢?有没有这样一种情况,第一个例子不会执行some_code(),而第二个会呢?我是不是完全理解错了?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-06-25 16:58:33

如果您捕获了异常(任何异常),则这两个代码示例是等效的。但是,如果您只在类块中处理某些特定的异常类型,并且发生了另一种类型的异常,那么只有当您有一个finally块时,才会执行some_code();

代码语言:javascript
复制
try {
    throw_exception();
} catch (ExceptionTypeA $e) {
    echo $e->getMessage();
}

some_code(); // Will not execute if throw_exception throws an ExceptionTypeB

但是:

代码语言:javascript
复制
try {
    throw_exception();
} catch (ExceptionTypeA $e) {
    echo $e->getMessage();
} finally {
    some_code(); // Will be execute even if throw_exception throws an ExceptionTypeB
}
票数 41
EN

Stack Overflow用户

发布于 2013-06-25 16:56:12

当你想要执行一段代码时,不管是否发生了异常,都可以使用fianlly块。

查看本页上的示例2:

PHP manual

票数 0
EN

Stack Overflow用户

发布于 2018-01-12 13:12:33

即使没有捕获到异常,最终也会触发。

尝试以下代码以了解原因:

代码语言:javascript
复制
<?php
class Exep1 extends Exception {}
class Exep2 extends Exception {}

try {
  echo 'try ';
  throw new Exep1();
} catch ( Exep2 $e)
{
  echo ' catch ';
} finally {
  echo ' finally ';
}

echo 'aftermath';

?>

输出将是

代码语言:javascript
复制
try  finally 
Fatal error: Uncaught exception 'Exep1' in /tmp/execpad-70360fffa35e/source-70360fffa35e:7
Stack trace:
#0 {main}
  thrown in /tmp/execpad-70360fffa35e/source-70360fffa35e on line 7

这是给你的小提琴。https://eval.in/933947

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17292959

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档