【问题标题】:error handling in php, die vs exceptionsphp中的错误处理,死亡与异常
【发布时间】:2012-02-20 15:37:21
【问题描述】:

例如,我的用法是:

$check = 'no';

if($check == 'yes') {
   //do stuff
} else {
      die('Error found');
}

我看到的许多开发人员都在使用:

if($check == 'yes') {
      //do stuff
   } else {
      throw new Exception('Error found.');
   }
  1. 哪一种方法“更好”?
  2. 抛出异常而不是停止执行脚本有什么好处?

【问题讨论】:

标签: php exception


【解决方案1】:

您可以同时使用throw new Exception,如果出现某些异常情况(数据库连接或查询、找不到页面或文件...),然后在适合您的地方使用catch。然后可能将错误记录到文件中,将邮件发送给管理员,然后使用die("Some textual message to user.");。如果您不想使用 die(),您可以向用户显示一些 404 not found 或 500 internal error page。

【讨论】:

    【解决方案2】:

    例外更好(在大型网站的设计中),因为:

    • 他们不会立即停止脚本(您有机会在漂亮的 5xx 页面中通知用户内部服务器错误)
    • 如果您决定以后以不同的方式处理错误,您可以在不修改原始代码的情况下这样做
    • 异常提供回溯并简化调试
    • 我不确定,但在使用 die 时不应调用析构函数(异常提供了执行它们的选项)
    • 您可以创建许多异常类型,每种类型用于不同类型的错误并在以后轻松处理它们

    您应该只在较小的脚本和页面中使用die,在这些脚本和页面中您不需要设置错误样式以供使用或出现致命错误(不能将主库包含到索引中或类似的东西中)。

    【讨论】:

      【解决方案3】:

      我想为大家省点麻烦,并在此处向您推荐此堆栈:PHP Error handling: die() Vs trigger_error() Vs throw Exception 对它们的用途的非常详细的解释,我相信不能说更好了。

      【讨论】:

        【解决方案4】:

        哪一种方法“更好”?

        这取决于您的需求。不能说哪个更好(当您真正想讨论本网站可能不适合的错误处理时,您还应该考虑其他错误处理方式)。

        抛出异常而不是停止执行脚本有什么好处?

        异常可以被捕获,die 不能被捕获。例如,如果你想测试你的代码,dies 通常是一个阻碍。

        除此之外,异常可以携带更多信息并更精确地携带。例如,与 die 相比,异常消息更易于访问。异常会保留引发它的文件和行。对于调试,还有堆栈跟踪等。

        【讨论】:

          猜你喜欢
          • 2012-09-15
          • 2011-04-03
          • 2017-05-29
          • 2011-04-22
          • 1970-01-01
          • 1970-01-01
          • 2011-07-14
          • 2013-05-16
          • 1970-01-01
          相关资源
          最近更新 更多