什么时候错误检查太多了?

时间:2013-01-24 11:23:23

标签: php error-handling

在我的PHP学习过程中,我一直在尝试阅读错误报告和处理的最佳实践,但语句因人而异,我一直在努力想出一个简单明了的处理错误的方法。应用。我对可能出错的事情使用异常,但在大多数情况下,我很难理解异常是否应该杀死应用程序并显示错误页面或者只是被捕获并静默处理。

似乎无法回避的事情是,有太多的报道吗?每次你调用一个函数都会出现可怕的错误,这意味着如果你要确认每一个函数调用,你将不得不用if语句填充页面,并找出其中一个失败可能产生的影响。有错误报告的简明文档或想法可以为我清除这一点吗?有最佳做法吗?良好错误处理的最佳例子是什么?

目前我执行以下操作:

  • 如果发生致命错误,请将重要事件结果添加到要记录的数组并通过电子邮件发送给我
  • 显示致命错误的抽象/一般错误。
  • 对可能失败的案例使用例外
  • 在开发环境中打开错误报告,关闭实时环境
  • 验证所有用户输入数据
  • 清理无效的用户输入
  • 向用户显示简明,信息丰富的错误消息,而不提供利用平台。

1 个答案:

答案 0 :(得分:3)

例外是你唯一没有理解的恕我直言:异常意味着不受你的控制,意味着被捕获从它们被引入的范围之外被处理。try块有一个特定的限制:它应包含相关的操作。例如,拿一个数据库试试catch块:

$array = array();
try {
    // connect throws exception on fail
    // query throws exception on fail
    // fetch results into $array
} catch (...) {
    $array[0]['default'] = 'me';
    $array[0]['default2'] = ...;
    ...
}

如您所见,我将每个数据库相关的函数放在try块中。如果连接未通过查询并且未执行提取,则因为没有连接就没有意义。如果查询失败,则跳过提取,因为在获取没有结果时没有任何意义。如果出现任何问题,我有一个空的$数组来处理:所以我可以用默认数据填充它。

使用例如:

之类的例外
$array = array();
try {
    if (!file_exists('file.php')) throw new Exception('file does not exists');
    include('file.php');
} catch (Exception $e) {
    trigger_error($e->getMessage());
}

毫无意义。它只是一个较长的版本:

if (!file_exists('file.php')) trigger_error('file does not exists');
    include('file.php');