2010-02-21 53 views
3

我是PHP新手,所以我很抱歉,如果这看起来很愚蠢。我搜索了四周,找不到任何具体解释我在找什么的东西。PHP:错误处理的控制流程是什么?

最终我有两个目标。

  1. 在生产中,当发生意外错误时,向用户显示默认的“oops”页面。
  2. 当发生预期的错误时,处理它而不会PHP死亡。

我的PHP错误处理的思维模型足以让我无法自信地前进,并且我一直无法找到任何有关此过程的良好文档。

给一些人为的例子。

  1. 用户发出请求,连接到数据库失败,我们显示一个oops消息。
  2. 用户发出请求,脚本不能正确解析,我们会显示oops消息。
  3. 用户发出请求,我们用乐观锁定的更新来查询数据库。它失败了,所以我们通知用户该对象已被更新。

我认为我的大部分困惑都是围绕着什么样的错误导致脚本死亡,哪些错误不会(使用默认处理程序)以及脚本何时死亡,我们如何优雅地通知用户?

另外,做任何标准的php函数/对象使用异常?如果我选择以更多的C风格处理异常,我是否会对我的任何一点感到惊讶?这是否会在PHP6中改变?如果是这样,我会努力讨论使用c风格和异常之间的差异,但如果不是,我宁愿只在整个PHP5中一直使用c风格。除非我绝对需要,否则这不是我想解决的问题。

编辑: 我刚刚意识到内容并不完全符合标题。我想知道,发生错误时,PHP的逻辑流程是什么?这样我可以更好地理解如何实现我在PHP中的错误处理方面的目标。

回答

3

大部分内置在tuff中的PHP都会触发您在默认设置中无法处理的错误。

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

我已经写了一堆代码,你可以在我的答案在这里使用了这样的情况: PHP: exceptions vs errors?

如果PHP不能真正分析您的文件你几乎拧,PHP将很崩溃在大多数情况下,它无法解析文件。尽管你可以在包含它之前尝试编写自己的包含函数eval的一个文件,如果eval失败,就跳过。你需要确保你基本上可以信任这些文件。

+0

PHP的内部错误处理程序何时会终止脚本? – Fred 2010-02-21 17:33:03

+0

当一个不可恢复的错误被触发(E_ERROR)_并且没有用户定义的处理程序可以正常处理它。如果E_PARSE在当前执行行中被触发,则会终止解释器(因此不在实际使用的某个函数内)。有关更多信息,请参见http://www.php.net/manual/en/errorfunc.constants.php。 – Kris 2010-02-21 18:21:53

+0

谢谢克里斯,那正是我正在寻找的。我曾尝试尽早找到这些信息并失败。 这听起来好像我可以成立一个E_ERROR一个处理程序,并把它转到一个oops页面,然后用trigger_error()触发了另一个处理程序E_USER_ERROR这也将进入“糟糕”页面,其他不可恢复的条件如无法连接到数据库。 根据文档,E_USER_ERROR“就像E_ERROR”一样。如果默认错误处理程序获取它,我认为它会像E_ERROR一样终止脚本。 – Fred 2010-02-22 03:33:53

0

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

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

+0

哪一个在解析错误的情况下不起作用。 这不是我要找的。 – Fred 2010-02-21 17:31:55