我一直在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块吗?谢谢!
编辑
return语句主要仅用于演示目的,但我也使用return,catch()因为我正在对该方法发出AJAX请求,而Javascript期望使用JSON对象,那么如果发生异常,我将返回一个空的JSON编码数组。我只是认为它不会为在示例中添加特定代码带来任何价值。
catch()
重要的提示
以下讨论假定我们正在讨论的是如上例中所示的结构化代码:无论选择哪种选择,异常都将导致该方法在逻辑上停止执行中间的操作。
只要您打算做同样的事情,无论try块中的哪个语句引发异常,那么使用单个try/ 肯定会更好catch。例如:
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" } }