在错误处理相同的情况下(我回过错误并将$_POST数据传回表单),是否有任何理由将代码拆分为多个尝试-捕捉块?我有一个get命令,如果一个无效的ID被传递,它可能会失败;我有一个setters,如果条目没有验证,它就会失败;我有一个write,如果它不能写入数据库或者一些后期的验证失败,它就会失败。假设在此页面上,所有异常都会向用户显示相同的通知(当然是在$e->getMessage()的帮助下)。所以它看起来更适合..。
// Try the whole block
try {
$var = $manager->get($id);
$var->setFoo('bar');
$var->setShazbot('fnord');
$manager->write($var);
}
catch (DataException $e) {
echo $e->getMessage();
}
catch (ValidationException $e) {
echo $e->getMessage();
}或者..。
// Try getting
try {
$var = $manager->get($id);
}
catch (DataException $e) {
echo $e->getMessage();
}
// Try setting
try {
$var->setFoo('bar');
$var->setShazbot('fnord');
}
catch (ValidationException $e) {
echo $e->getMessage();
}
// Try committing
try {
$manager->write($var);
}
catch (DataException $e) {
echo $e->getMessage();
}现在,再次记住,在本例中,所有三个catch块都在执行相同的任务。然而,获取、验证和写作是三件截然不同的事情,我在想,尝试单独而不是一次捕获它们可能更明智。还有什么更有意义的?
发布于 2011-04-05 14:25:03
这是一种与风格无关的情况。当抛出异常时,真正的问题在于您希望代码做些什么。
块中的语句是否相互依赖才能正常工作?如果一个调用失败,它们是否是一个需要停止的逻辑分组?
如果是这样的话,那么将它们都封装在一个块中,并在那里处理异常。
如果没有(这意味着代码可以继续到下一个小块语句,而不需要前面的调用成功执行),那么继续并拆分它们。
发布于 2011-04-05 14:25:07
因为它们以相同的方式处理异常,所以我将它们分组到一个块中。这使得代码看起来更干净,更容易阅读。
发布于 2011-04-05 14:26:22
如果不需要为每一行设置特定的清理例程,那么一次捕获所有异常是可以接受的。当然,不要捕获最高级的异常父级,因为您可能会捕获没有业务处理的异常。
https://stackoverflow.com/questions/5553401
复制相似问题