ran*_*tsh 3 php exception-handling
模拟finally子句的最佳实践是什么?我知道这可能被认为相关(虽然我不认为这是一个副本)这个问题.
但是,在我的情况下,我想处理异常,我想最终使用(或任何PHP等价或实践)python定义:
在离开try语句之前总是执行finally子句,无论是否发生了异常.
在try-catch块之后松散地编写代码对我来说似乎是一种丑陋的做法.
<?php
$db = mysqli_connect();
try {
call_some_function($db);
} catch (Exception $e) {
mysqli_close($db);
throw $e;
}
mysql_close($db);
Run Code Online (Sandbox Code Playgroud)
因此,除非您升级到PHP 5.5(将包含finally构造),否则这可能是您的最佳选择.
这可以被认为是一种非答案,但是有一些方法可以构建finally不需要的代码,例如"RAII模式"("资源获取是初始化"),其中资源的清理是在析构函数中完成的.表示该资源的本地范围变量.
我们的想法是,如果异常使您退出函数范围,您的析构函数将会触发,因此您的清理将按预期进行.如果没有抛出异常,您将到达函数的末尾,并且您的变量将超出范围.
一个快速的谷歌出现了这个简单的代码,用于执行任意回调.