【问题标题】:PHP Exceptions - try/catch necessary?PHP 异常 - 需要尝试/捕获吗?
【发布时间】:2012-11-02 13:01:42
【问题描述】:

我开始使用“真实”异常而不是自定义错误函数。

我认为我不需要每次都使用 try/catch 块,只是抛出异常也没关系,但现在由于这些未捕获的异常,我得到了一个致命错误。

当我设置 error_reporting(0) 时一切正常,但我想完全避免错误。有谁知道 try/catch 的替代方法或如何在不发生致命错误的情况下抛出异常?

提前致谢!

【问题讨论】:

  • 呃……不。异常的全部意义在于,如果没有被捕获,它总是致命的。你不应该到处都需要try/catch 块。您应该使用set_exception_handler 设置“最后机会”异常处理程序
  • 这是一个 Web 或命令行应用程序吗?您应该在可以有意义地处理异常的地方捕获异常。在某些情况下,它位于应用程序的入口点中,但很多时候它更深于您想要采取一些行动作为响应的地方。
  • @David:它是一个网络应用程序。当然,我会尝试捕捉它们,但例如:在我的 DB-Class 中,我有一个名为 _handle_error() 的方法,它处理错误并记录它们。调用 _handle_error() 时,我无法捕获方法本身引发的异常。我希望它可以在不发布代码的情况下理解。 :-)

标签: php exception exception-handling try-catch


【解决方案1】:

您可以为此使用set_exception_handler() 并自己处理任何未捕获的异常。

您注册的回调将接收异常作为其第一个也是唯一的参数。但是,可以注册一个虚拟函数:

  1. 在生产环境中,建议记录异常而不是消除它;通过这种方式,您可以跟踪未预料到的异常。

  2. 处理程序完成后脚本执行停止。

【讨论】:

  • 太好了,谢谢!我只是将一个没有内容的空函数设置为 exception_handler 并且不再有致命错误。我希望这不会太快太脏..
  • 很高兴知道,我添加了两件事要记住。
猜你喜欢
  • 2011-12-05
  • 2014-05-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-17
  • 1970-01-01
  • 2016-05-11
  • 1970-01-01
相关资源
最近更新 更多