Php 什么时候错误检查过多?

Php 什么时候错误检查过多?,php,error-handling,Php,Error Handling,在我学习PHP的过程中,我一直在努力阅读错误报告和处理的最佳实践,但语句因人而异,我一直在努力找到一种清晰简洁的方法来处理应用程序中的错误。我在可能出错的事情上使用异常,但在大多数情况下,我很难理解异常是应该终止应用程序并显示错误页面,还是只是被捕获并静默处理 我似乎无法理解的是,是否有太多的报道?每次调用函数时,都可能出现严重错误,这意味着如果要确认每个函数调用,就必须用if语句填充页面,并计算出一次失败对其余函数的影响。是否有一个简明的错误报告文档或想法可以为我澄清这一点?是否有最佳实践?好

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

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

目前我做了以下工作:

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

例外是你唯一不了解的事情,IMHO:例外意味着你无法控制,意味着被抓住,意味着从抛出的范围之外处理。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');

简短提示:不要在生产环境中关闭错误报告。只需禁用
显示错误
。你特别想知道生产中是否出了问题,对吗?(但是,为了不暴露任何关键信息,不向用户显示错误非常重要)。谢谢Daniel。我没有考虑。如果你不能连接到数据库,你会停止执行脚本的其余部分吗?因为有级联效应。如果你不能连接到数据库,你就做不了什么。@Sam,取决于应用程序。可以肯定的是,我不会在异常情况下终止整个应用程序的执行<代码>触发错误就是为了这个。异常并不是用来终止应用程序,而是用来处理可恢复的错误。我从来没有这样想过。我以为它们是针对一个大调的。对于第二个示例,您触发了一个错误,因为该文件不存在。你如何判断它是否是致命的?它依赖于上下文吗?@Sam,总之:异常应该只停止
try{}
块中的内容,并在
catch()中处理<代码>触发器_错误
仅当您要停止正在运行的流时才应使用。至少这是他们的目的。很明显,你可以对他们做任何你想做的事。