抛出异常以返回服务器错误是不好的,例如。 404页面不存在?

时间:2010-05-07 17:48:26

标签: php http exception

我正在研究PHP框架,目前正在设计错误处理。根据我在SO上所读到的内容,我应该只使用异常情况,特殊情况。因此,输入错误密码时抛出异常是错误的。

当我想向用户返回服务器错误代码时,是否应该避免使用异常(例如,404 Page Not Found)?如果是这样,我应该编写自己的错误处理类吗?

4 个答案:

答案 0 :(得分:7)

您的代码不应抛出与用户交互的异常,它应抛出异常以通知更高级别的代码,发生不可恢复的事情。

现在,根据发生的情况,您可能希望使用某个HTTP状态代码进行响应。但是在那时你没有抛出异常来触发服务器错误,你正在捕获异常并给予用户适当的响应。

如果问题是当请求的文章/博客/项目/不存在时会发生什么 - 好吧,如果负责显示信息的代码可能只是设置响应代码,那么一切手段,不要使用例外。

如果您正在使用MVC框架,并且您的各个控制器可以设置响应代码,那么请让它们。

如果最顶层的异常处理程序可以使用http响应代码更好地向用户显示错误消息,那么就让它。

答案 1 :(得分:2)

例外不是控制流机制。

答案 2 :(得分:0)

例外应该仅限于应用程序真正无法处理这种情况的那些时间。

正如你所说,抛出错误密码的例外是非常错误的。

我能提出的唯一服务器错误类型情况是,如果所需的资源(如您的sql server)不可用。

除此之外,访问被拒绝等都是您的应用程序应该具有正常处理方式的常见事件。

答案 3 :(得分:0)

我认为你在谈论两件不同的事情:

  1. 框架本身出现问题时出现的错误,或者框架以不应该工作的方式使用。
  2. HTTP状态代码(主题中提到的404 Page Not Found是状态代码)。
  3. 在第一种情况下,如果要通过使用面向对象的方法来解决问题,则抛出异常是正确的方法。 HTTP状态代码是HTTP协议的一部分,您的框架不应以任何方式处理它们。