5

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

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

目前我执行以下操作:

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

1 回答 1

3

异常是您唯一不了解的事情恕我直言:异常意味着不受您的控制,意味着要在它们被抛出的范围之外进行处理。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');
于 2013-01-24T11:36:40.003 回答