PHP中的异常消息

时间:2011-10-13 13:11:18

标签: php oop exception

通常PHP应用程序具有用户界面。在MVC分层应用程序中,您可能会抛出一些例外。

您在例外中设置了什么类型的消息:

A)

  • 要向用户显示的自定义消息
  • 并在投掷之前用技术细节记录错误

B)

  • 自定义技术错误和自定义异常
  • 在例外附近没有记录
  • 捕获异常,记录错误并根据异常类型显示自定义用户消息

C)其他变种

4 个答案:

答案 0 :(得分:2)

用户应该看不到任何错误或例外。

如果出现问题,请记录下来,也许将其邮寄给自己,但不要将其显示给用户,只需继续进行,就好像什么都没发生一样

这就是生产网站关闭error_reporting的原因

答案 1 :(得分:1)

B - 这就是我这样做的方式。有关ajax和抛出异常的进一步考虑。如果你有一个包含大量javascript的丰富UI,那么我建议您使用不同的状态代码(http响应)抛出不同的异常,然后根据这些响应显示不同的消息。

您可能还希望在不同环境中以不同方式处理异常。在开发过程中,您可能希望显示异常并显示堆栈跟踪。

在现场,您可能希望显示您的404页面,或者在所有例外情况下捕获全部500页。

答案 2 :(得分:1)

全科医学

C - 发生错误时,您应该只记录回溯,因为您将无法恢复它。您在Application类中捕获错误消息,然后根据设置显示消息或记录它并向用户显示某种通用屏幕。

记录错误时,添加更多信息,例如浏览器版本,IP地址,请求的网址。

用户友好的消息

在我的模型中,我有时会抛出“ForUser”类型的异常。那些不记录回溯,当被Application类捕获时,它们会显示给用户。很少有异常子类,如验证,逻辑等。

重新抛出异常

一些UI元素会检测异常​​以正确显示它们,例如表单提交会调用Model-> update(),捕获验证异常并在Ajax表单中显示适当的字段。

答案 3 :(得分:0)

异常和错误仅适用于开发人员(或与您的应用程序交互的其他应用程序)

在php中,常见的做法是创建错误处理程序(我喜欢将错误转换为异常)和异常处理程序(对于未捕获的异常)

在开发环境中,您会看到完整的异常消息和回溯。

在生产中,处理程序将异常转换为用户友好的消息,根本没有敏感的细节。也许您希望他们知道的是“出了问题”,并且您希望将该消息嵌入到用于网站其余部分的相同布局中。尝试去任何体面的网站并做错事,比如去一个不存在的网址。您可能会找到一个不错的404页面,而不是“例外:url不存在”或类似的东西。

此外,您可能需要不同的错误日志记录级别,具体取决于您所处的环境。在开发过程中,您需要记录所有错误,警告,信息消息和调试消息。在生产中,您可能只想记录错误(可能还有警告)。

设置这一切可能非常棘手。这就是为什么我们有框架来处理这类任务。您应该尝试Symfony 2