PHP:错误处理的控制流程是什么?

时间:2010-02-21 14:08:44

标签: php error-handling

我是PHP的新手,所以如果这看起来很傻,我会道歉。我四处寻找,找不到任何具体解释我正在寻找的东西。

最终我有两个目标。

  1. 在生产中,当发生意外错误时,向用户显示默认的“oops”页面。
  2. 发生预期错误时,请在没有PHP死亡的情况下处理它。
  3. 我的PHP错误处理的心理模型很不稳定,我无法放心地前进,而且我无法找到有关该过程的任何好文档。

    给出一些人为的例子。

    1. 用户发出请求,与DB的连接失败,我们显示oops消息。
    2. 用户发出请求,脚本无法正确解析,我们会显示oops消息。
    3. 用户发出请求,我们使用乐观锁定查询数据库。它失败了,因此我们通知用户该对象已更新。
    4. 我认为我的大部分困惑都是围绕着什么错误导致脚本死亡以及哪些错误没有(使用默认处理程序),以及脚本何时死亡,我们如何优雅地通知用户?

      另外,任何标准的php函数/对象都使用异常吗?如果我选择处理更多C风格的异常,我不会对任何一点感到惊讶吗?这会在PHP6中改变吗?如果是这样的话,我将努力提出使用c风格和异常之间的差异,但如果没有,我宁愿在PHP5中一致地使用c风格。除非我绝对需要,否则这不是我有兴趣解决的问题。

      编辑: 我刚刚意识到内容与标题不太匹配。我想知道,当发生错误时,PHP的逻辑流程是什么?通过这种方式,我可以更好地理解如何在PHP中实现与错误处理相关的目标。

2 个答案:

答案 0 :(得分:3)

大多数PHP的内置缓存触发了您在默认设置中无法真正处理的错误。

但是,您可以通过设置自定义错误处理程序并抛出异常而不是错误来解决此问题。 (如果可能,PHP将在内部处理错误之前运行您的处理程序,因此您可以以正常方式实际捕获异常。)

我在这里的答案中写了一堆你可以用来解决这个问题的代码: PHP: exceptions vs errors?

如果php实际上无法解析你的文件你几乎搞砸了,在大多数无法解析文件的情况下,php会崩溃。虽然你可以尝试编写自己的包含函数,eval在包含它之前是一个文件,如果eval失败则跳过它。你需要确保你基本上可以信任这些文件。

答案 1 :(得分:0)

例外已很好地整合到PHP5中。它们具有与Java / C ++异常相同的try/catch语法。发生预期错误时使用它们。

如果您想要显示自定义“ oops ”页面,可以将set_exception_handlertrigger_error结合使用。有关更多提示,请考虑this链接。