首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >例外情况:当处理相同时,一个块还是多块?

例外情况:当处理相同时,一个块还是多块?
EN

Stack Overflow用户
提问于 2011-04-05 14:20:09
回答 3查看 85关注 0票数 2

在错误处理相同的情况下(我回过错误并将$_POST数据传回表单),是否有任何理由将代码拆分为多个尝试-捕捉块?我有一个get命令,如果一个无效的ID被传递,它可能会失败;我有一个setters,如果条目没有验证,它就会失败;我有一个write,如果它不能写入数据库或者一些后期的验证失败,它就会失败。假设在此页面上,所有异常都会向用户显示相同的通知(当然是在$e->getMessage()的帮助下)。所以它看起来更适合..。

代码语言:javascript
运行
复制
// 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();
}

或者..。

代码语言:javascript
运行
复制
// 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块都在执行相同的任务。然而,获取、验证和写作是三件截然不同的事情,我在想,尝试单独而不是一次捕获它们可能更明智。还有什么更有意义的?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-04-05 14:25:03

这是一种与风格无关的情况。当抛出异常时,真正的问题在于您希望代码做些什么。

块中的语句是否相互依赖才能正常工作?如果一个调用失败,它们是否是一个需要停止的逻辑分组?

如果是这样的话,那么将它们都封装在一个块中,并在那里处理异常。

如果没有(这意味着代码可以继续到下一个小块语句,而不需要前面的调用成功执行),那么继续并拆分它们。

票数 3
EN

Stack Overflow用户

发布于 2011-04-05 14:25:07

因为它们以相同的方式处理异常,所以我将它们分组到一个块中。这使得代码看起来更干净,更容易阅读。

票数 0
EN

Stack Overflow用户

发布于 2011-04-05 14:26:22

如果不需要为每一行设置特定的清理例程,那么一次捕获所有异常是可以接受的。当然,不要捕获最高级的异常父级,因为您可能会捕获没有业务处理的异常。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5553401

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档