我一直在 PHP 代码中使用 try..catch 块,但我不确定是否正确使用了它们。
例如,我的一些代码如下所示:
try {
$tableAresults = $dbHandler->doSomethingWithTableA();
$tableBresults = $dbHandler->doSomethingElseWithTableB();
} catch (Exception $e) {
return $e;
}
因此,我将多个数据库操作分组在同一个 try/catch 块中,因为如果任何事务中发生任何异常,我将能够处理它。
我这样做是因为我认为它比以下内容更具可读性和效率:
try {
$tableAresults = $dbHandler->doSomethingWithTableA();
} catch (Exception $e) {
return $e;
}
try {
$tableBresults = $dbHandler->doSomethingWithTableB();
} catch (Exception $e) {
return $e;
}
虽然,我不确定我正在做的事情是一种好的做法还是只是一种捕获异常的懒惰方法。
我的假设是,只有当异常需要特殊处理时,它才应该有自己的 try/catch 块,否则将它们分组在同一个 try/catch 中应该可以。
所以我的问题是:
每个数据库事务使用 try/catch 块有什么优点吗?或者我仍然可以将多个数据库事务分组在同一个 try/catch 块中而没有任何问题吗?
可以嵌套 try/catch 块吗?
谢谢!
EDIT
return 语句主要仅用于演示目的,但我也在catch()
因为我正在向该方法发出 AJAX 请求,并且 Javascript 需要一个 JSON 对象,那么如果发生异常,我将返回一个空的 JSON 编码数组。我只是认为在我的示例中添加特定代码不会增加任何价值。
重要的提示
以下讨论假设我们正在讨论如上例所示结构的代码:无论选择哪种替代方案,异常都会导致该方法在逻辑上停止执行其中间的任何操作。
只要你打算做同样的事情,无论语句中的哪个语句try
块抛出异常,那么使用单个块肯定更好try
/catch
。例如:
function createCar()
{
try {
install_engine();
install_brakes();
} catch (Exception $e) {
die("I could not create a car");
}
}
多种的try
/catch
如果您可以并且打算以特定于导致故障的原因的方式处理故障,则块会很有用。
function makeCocktail()
{
try {
pour_ingredients();
stir();
} catch (Exception $e) {
die("I could not make you a cocktail");
}
try {
put_decorative_umbrella();
} catch (Exception $e) {
echo "We 're out of umbrellas, but the drink itself is fine"
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)