检查错误并抛出异常多远?

时间:2010-03-04 11:28:28

标签: php exception exception-handling error-handling

我正在研究我网站的后端,我想知道我应该在多大程度上测试错误并相应地抛出异常? 在不正确使用方法和功能的意义上进行测试。正确使用时没有错误。

我最担心的是代码膨胀,并且用一堆if / elses,类型检查和其他类似的测试来解决它。

你是否应该考虑某人可以使用某个对象的所有可能方式,捕获所有不正确的用途,并抛出异常,以便开发人员清楚地知道他们做错了什么?

或者它是一种更好的方法让代码自然地破解(显然捕获并检查那些重要的事情,但不是每个意外事件),并依赖于使用代码的任何人阅读可用的文档并相应地使用它?

处理此类问题时是否需要遵循一般最佳做法或指南?我正在使用PHP,有什么特定的PHP,虽然这个问题通常是语言范围的吗?

感谢您对此事的任何帮助。

2 个答案:

答案 0 :(得分:4)

至少,你的应用程序不应该“破解”:当检测到错误时(因为你检测到问题可能发生并避免它,或者因为问题确实发生了),你应该显示一些不错的错误消息,并最终记录错误的技术信息。

关于膨胀代码:我不会在我的代码中添加太多测试以及所有这些:它最终会出现难以理解和维护的内容 - 这很重要!


我通常会尝试做的是:

  • 测试用户提供的数据中的错误
    • 例如,使用特定的类,因此这些检查不在处理数据库和业务规则的代码中间。
    • 这些测试相对精确,以便为用户生成有用的错误消息
      • 例如:“您不应输入超过20个字符
      • 或“已有用户使用该电子邮件地址
    • 基本上,重要的是用户。
  • 当用户提供的数据似乎正常时,我会使用它。
    • 并且,如果发生某些错误,则很可能是技术错误
    • 应该记录哪些
    • 只有“ oops,发生错误”才会显示给用户。
    • 这意味着,在这里,测试并不那么精确:我们只需知道它是否有效 - 不一定非常详细。

当然,最后,您应该确保数据库中的数据是正确的,并且您不能只保存一半的数据。


处理技术错误的常用方法是使用异常;这是一个非常基本的想法:

try {
    // Begin transaction to the DB

    // Some code that might fail and throw an Exception

    // Some other code that might fail and throw an Exception

    // Code here will not be executed if an Exception has been thrown

    // Commit DB transaction
} catch (Exception $e) {
    // Rollback transaction (cancels the queries that were sent to the DB)
    // Log technical informations to a file
    // Display a nice message
}

最棒的是,它允许将所有错误处理代码放在一个地方,并在重要内容中放置较少的测试代码;即“让它失败,我们将在以后处理问题

答案 1 :(得分:1)

我通常只是确保方法输入参数和/或公共成员被填充并且具有正确的类型(string,int等等)。除此之外,我只是让它自然而然地破裂。 (如果人们不打算阅读文档,那么他们应该让事情稍微破解。)

正如我所看到的,你不会通过错误检查来破坏你的代码,他们唯一的目的就是支持你的同事/客户/随机开发者的懒惰。