php - PHP 中的 `finally` 关键字是什么?

标签 php try-catch-finally finally

考虑这两个例子

<?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
?>

<?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() 而第二个示例执行的情况?我完全没有捕获重点吗?

最佳答案

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

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

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

但是:

try {
    throw_exception();
} catch (ExceptionTypeA $e) {
    echo $e->getMessage();
} finally {
    some_code(); // Will be execute even if throw_exception throws an ExceptionTypeB
}

关于php - PHP 中的 `finally` 关键字是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17292959/

相关文章:

php - 如何合并两个不同长度的数组,同时删除一个数组的一部分?

php - 进行数据库搜索并发送电子邮件

java - 如何避免在我的情况下返回 null?

Bash:最后(尝试,除外)异常

electron - Cypress:Electron 不支持 .finally()?

php - 为什么 str 替换仅在第一个匹配中起作用?

javascript - CKEditor 无法解析 JSON 响应

c# - 是否可以在 finally block 中处理数据集然后返回数据集?

c# - 异常处理放置 - C#

java - 如果在finally block 内关闭多个资源,是否需要异常处理?