什么时候错误检查太多


When is error checking too much?

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

我似乎无法理解的是,是否存在过多的报道?每次调用函数时,都可能出现可怕的错误,这意味着如果您要确认每个函数调用,则必须用if语句填充页面,并找出一个失败可能对其余部分产生的影响。是否有一个简明的文档或错误报告的想法可以为我解决这个问题?是否有最佳实践?良好的错误处理的最佳示例是什么?

目前我做以下工作:

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

恕我直言,异常是您唯一不了解的事情:异常意味着不受您的控制,旨在从它们被扔出的范围之外进行处理。try 块有一个特定的限制:它应该包含相关的操作。例如,以数据库 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 = 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');