我是PHP新手,所以我很抱歉,如果这看起来很愚蠢。我搜索了四周,找不到任何具体解释我在找什么的东西。PHP:错误处理的控制流程是什么?
最终我有两个目标。
- 在生产中,当发生意外错误时,向用户显示默认的“oops”页面。
- 当发生预期的错误时,处理它而不会PHP死亡。
我的PHP错误处理的思维模型足以让我无法自信地前进,并且我一直无法找到任何有关此过程的良好文档。
给一些人为的例子。
- 用户发出请求,连接到数据库失败,我们显示一个oops消息。
- 用户发出请求,脚本不能正确解析,我们会显示oops消息。
- 用户发出请求,我们用乐观锁定的更新来查询数据库。它失败了,所以我们通知用户该对象已被更新。
我认为我的大部分困惑都是围绕着什么样的错误导致脚本死亡,哪些错误不会(使用默认处理程序)以及脚本何时死亡,我们如何优雅地通知用户?
另外,做任何标准的php函数/对象使用异常?如果我选择以更多的C风格处理异常,我是否会对我的任何一点感到惊讶?这是否会在PHP6中改变?如果是这样,我会努力讨论使用c风格和异常之间的差异,但如果不是,我宁愿只在整个PHP5中一直使用c风格。除非我绝对需要,否则这不是我想解决的问题。
编辑: 我刚刚意识到内容并不完全符合标题。我想知道,发生错误时,PHP的逻辑流程是什么?这样我可以更好地理解如何实现我在PHP中的错误处理方面的目标。
PHP的内部错误处理程序何时会终止脚本? – Fred 2010-02-21 17:33:03
当一个不可恢复的错误被触发(E_ERROR)_并且没有用户定义的处理程序可以正常处理它。如果E_PARSE在当前执行行中被触发,则会终止解释器(因此不在实际使用的某个函数内)。有关更多信息,请参见http://www.php.net/manual/en/errorfunc.constants.php。 – Kris 2010-02-21 18:21:53
谢谢克里斯,那正是我正在寻找的。我曾尝试尽早找到这些信息并失败。 这听起来好像我可以成立一个E_ERROR一个处理程序,并把它转到一个oops页面,然后用trigger_error()触发了另一个处理程序E_USER_ERROR这也将进入“糟糕”页面,其他不可恢复的条件如无法连接到数据库。 根据文档,E_USER_ERROR“就像E_ERROR”一样。如果默认错误处理程序获取它,我认为它会像E_ERROR一样终止脚本。 – Fred 2010-02-22 03:33:53