【问题标题】:Why does PHP's "trigger_error" return true?为什么 PHP 的“trigger_error”返回 true?
【发布时间】:2012-09-11 12:54:54
【问题描述】:

我对自定义函数使用错误处理,并注意到所有三种用户错误类型(NOTICE、WARNING 和 ERROR)都返回 true

我使用 trigger_error 函数在函数处理不正确(例如插入无效数据)时对其进行转义。我认为逃避该功能的最佳方法是使用:

return trigger_error('Error notice here');

问题是,错误返回 true。虽然不是我的所有函数在成功时都返回 true,但在我看来这可以在将来使用(因此,false 表示错误)。

这个函数返回 true 有什么原因,还是我在退出无效函数时遵循了不好的做法?

我知道解决方案可能是:

trigger_error('Error notice here');
return false;

但我认为会有更优雅的方法。如果没有,希望对最佳实践有一些见解。

【问题讨论】:

    标签: php exception exception-handling error-handling


    【解决方案1】:

    返回TRUE是因为触发错误的操作成功了。如果您为第二个参数指定了无效的错误类型,它将是 FALSE

    如果您想在一行中返回 TRUE 并触发错误(顺便说一句,这在我看来毫无意义),您可以这样做:

    return !trigger_error('Error notice here');
    

    顺便说一句,如果您触发E_USER_ERROR,我怀疑评估返回值的代码是否会被调用,因为除非您注册了一个错误处理程序来捕获它,否则该错误将是致命的。

    如果您想退出带有可以在代码中处理的错误消息的函数,您应该使用Exception。尽管这些在程序函数的上下文中是否有意义仍有待商榷。

    【讨论】:

    • 谢谢,异常似乎是一个更合适的解决方案,也阻止了函数的继续。我已经阅读了异常而不是错误所需的负载。它看起来很重要,让我想知道经常使用它们是否是最佳实践。例如,插入新用户评论的函数,并且需要检查是否找到用户 ID、是否存在正在评论的帖子 ID 等,是否应该在每个故障点都抛出异常?跨度>
    • @Rhys 这真的取决于用例。异常是错误处理的 OOP 方式,这就是我说...whether these make sense in the context of a procedural function is highly debatable 的原因。如果您决定需要停止执行某个函数,您有两个选择:returnthrow。在纯过程代码中,return 通常更有意义,在 OOP 代码中通常相反。但是要提到的示例是一个很好的异常用例,因为异常可以包含描述错误内容的消息,而返回 FALSE 则不容易。
    【解决方案2】:

    您询问了比trigger_error() 更优雅的解决方案。

    我建议一个更优雅的方法可能是抛出异常而不是触发错误。

    【讨论】:

      猜你喜欢
      • 2014-09-25
      • 1970-01-01
      • 1970-01-01
      • 2017-07-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-10
      • 2010-09-13
      相关资源
      最近更新 更多