我正在尝试整理错误和异常处理程序。如果出现 fatal error ,我会向自己发送一条短信;如果出现其他错误,我会收到一封电子邮件。 (我在末尾添加了数组,以防它们可能有用。)
对于错误,有 https://php.net/manual/en/errorfunc.constants.php但我找不到任何类似的异常(exception)。
我相信我可以设置自己的异常值,但是对于一般异常、PDOExceptions
等是否有商定的严重性级别。我发现提到的严重性的唯一地方是在 ErrorException
中。 (我目前只使用 PDOExceptions,但正在 try catch 其他“常规”异常。)
某处是否有严重性帮助图表?我坦率地承认我正在与异常(exception)作斗争。
PS我看过https://www.php.net/manual/en/errorexception.getseverity.php但这看起来是为了将错误作为异常发送。我现在很困惑。
错误代码数组,以防它们有用。
$phpErrorCodes = array (
1 => "E_ERROR",
2 => "E_WARNING",
4 => "E_PARSE",
8 => "E_NOTICE",
16 => "E_CORE_ERROR",
32 => "E_CORE_WARNING",
64 => "E_COMPILE_ERROR",
128 => "E_COMPILE_WARNING",
256 => "E_USER_ERROR",
512 => "E_USER_WARNING",
1024 => "E_USER_NOTICE",
2048 => "E_STRICT E_ALL",
4096 => "E_RECOVERABLE_ERROR",
8192 => "E_DEPRECATED",
16384=> "E_USER_DEPRECATED",
32767=> "E_ALL");
$phpErrorCodesFatal = array (
1 => "E_ERROR",
16 => "E_CORE_ERROR",
64 => "E_COMPILE_ERROR",
4096 => "E_RECOVERABLE_ERROR");
$phpErrorCodesFatalNumberOnly = array (
1 ,
16 ,
64 ,
4096);
//4096 recoverable but dangerous so treated as fatal
最佳答案
异常
让我尝试澄清一些误解。
Are there severity codes for exceptions?
没有。所有异常都是严重的。
异常将停止脚本的执行。它们用于在前面的代码无法执行的情况下阻止执行后面的代码。
How do I know if they are important?
所有异常(exception)都很重要。当触发异常时,它会告诉您作为开发人员代码中发生了意外的情况。您编写的代码根本没有预料到会发生这种情况,为了防止未定义的行为,它应该立即停止处理。
Unhandled exceptions would show up as PHP Warning. - mario
事实并非如此。任何未处理的异常都将转换为 PHP Fatal error 。如果您的应用程序不知道如何处理异常情况,那么 PHP 必须立即停止!这不是一个你可以忽略或保持沉默的警告;这是一个 fatal error 。
As a rule of thumb I should treat exceptions as fatal errors?
不一定。在极少数情况下,开发人员可能期望一段特定的代码抛出异常,该异常可以恢复或解决。代码逻辑预见到会出现问题并有解决问题的方法。如果捕获并处理异常,则不会导致 fatal error 。
异常和 fatal error 之间的区别在于,您可以捕获异常并从异常中恢复,但不能从 fatal error 中捕获和恢复。
So if I don't do anything then exceptions turn to errors.
如果您没有捕获异常并且没有实现自己的错误处理程序,那么 PHP 将默认使用内置错误处理程序。逻辑是它将停止脚本并抛出错误,并将异常作为消息。然后,根据您的配置设置,此错误将记录在服务器上或显示给用户。
错误
PHP 有着不好的历史。早期 PHP 版本的问题之一是,它对于写得不好的代码非常宽容。它要么尝试猜测正确的操作应该是什么,要么只是警告用户一些严重的问题。这样做的结果是,许多开发人员学会了简单地忽略警告、通知,有时甚至是错误。
PHP 7 中发生了一些变化。
PHP 7 改变了 PHP 报告大多数错误的方式。现在,大多数错误不是通过 PHP 5 使用的传统错误报告机制来报告错误,而是通过抛出 Error 来报告。异常(exception)情况。错误仍然不是异常(exception),但它的行为就像异常(exception)一样。您可以捕获错误,如果不这样做,您仍然会看到“ fatal error : Uncaught Error :...”。。
现代 PHP 功能现在将使用异常。这意味着用户态代码也应该尝试遵循相同的方法。当您的代码应该停止执行时抛出异常(不要为此使用 die/exit
),并且仅在您知道如何恢复时捕获它们。
随着 future 的 PHP 版本,通知和警告可能会更改为错误异常。现在不要忽视他们。将所有这些问题视为代码中的严重问题并立即修复它们。
关于php - 异常代码的严重性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56905814/