php中的错误处理,死亡与异常

时间:2012-01-27 16:39:30

标签: php exception

例如,我的用法是:

$check = 'no';

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

许多开发人员使用的是:

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

4 个答案:

答案 0 :(得分:7)

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

答案 1 :(得分:0)

  

哪种方法“更好”?

这取决于您的需求。不能说哪个更好(并且还有其他的错误处理方法,当你真正想要讨论错误处理时,你应该考虑到这个网站可能不是正确的地方)。

  

任何好处都是抛出异常而不是停止执行脚本?

可以捕获异常,无法捕获die。例如,如果你想测试你的代码,die通常是一个显示阻止。

除此之外,异常可以携带更多信息并更精确地传递。例如,除了die之外,该消息更易于访问。异常会保留文件和行所在的位置。对于调试,有堆栈跟踪等等。

答案 2 :(得分:0)

例外情况更好(在设计大型网站时),因为:

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

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

答案 3 :(得分:0)

如果发生某些异常情况(数据库连接或查询,页面或文件未找到......),然后throw new Exception它适合您,您可以同时使用catch。然后可能将错误记录到文件,将邮件发送给管理员,然后使用die("Some textual message to user.");。如果您不想使用die(),则可以向用户显示未找到的404或500内部错误页面。