9

PHP 5.5 增加了对finallytry/catch 块的支持。

Java 允许您创建一个没有 catch 块的 try/catch/finally 块,因此您可以在发生异常时在本地进行清理,但让异常本身向上传播调用堆栈,以便单独处理。

try {
    // Do something that might throw an exception here
} finally {
    // Do cleanup and let the exception propagate
}

在当前版本的 PHP 中,您可以实现可以对异常进行清理并让它传播的东西,但如果没有抛出异常,则永远不会调用清理代码。

try {
    // Do something that might throw an exception here
} catch (Exception $e) {
    // Do cleanup and rethrow
    throw $e;
}

PHP 5.5 会支持 try/finally 样式吗?我一直在寻找这方面的信息,但我能从 PHP.net 找到最接近答案的信息,只暗示它没有。

在 PHP 5.5 及更高版本中,也可以在 catch 块之后指定 finally 块。finally 块中的代码将始终在 try 和 catch 块之后执行,无论是否引发了异常,并且在恢复正常执行之前。

措辞表明您总是希望有一个 catch 块,但据我所知,它并没有直接说明它。

4

2 回答 2

9

是的,try/finally受支持(RFC实时代码)。文档确实不是很清楚,应该修改。

于 2013-06-20T08:45:09.573 回答
7

在 5.5RC3 服务器上实现了一个测试用例

正如您在代码中看到的,它按预期工作。在这一点上,文档确实是错误的。

于 2013-06-20T08:46:46.013 回答