PHP中的“最终”关键字是什么?

2022-08-30 19:52:08

考虑这两个示例

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


答案 1

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

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
}

答案 2

最后,当您希望执行一段代码而不管是否发生异常时,将使用block...

查看此页面上的示例 2:

菲律宾比索手册


推荐