PHP 5.5 and try ... finally

9

PHP 5.5将在try/catch块中添加对finally的支持。

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块,但据我所见并没有明确说明。
2个回答

9

是的,try/finally被支持了(RFC实时代码)。文档确实不太清晰,需要修正。


7

我已经在5.5RC3服务器上实施了一个测试用例

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接