在我的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');