php - 异常代码的严重性

标签 php exception error-handling error-code

我正在尝试整理错误和异常处理程序。如果出现 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/

相关文章:

c# - 异常文档的自动化

error-handling - @@ ERROR <> 0在触发器中

c# - 使用数据库来防止UI演示文稿中的错误

php - 回应项目的命令

php - 在 WooCommerce 产品搜索小部件中设置最小字符数

java - 线程 "main"javax.swing.ImageIcon.<init> 处的 java.lang.NullPointerException 中出现异常(来源未知)

ajax - 在 Ajax 请求期间处理错误的规范方法是什么?

php - echo 不起作用,位于 ($row=0)

php - filter_input - 如果未设置 GET 键,则设置为默认值

c++ - 在 Windbg 中,当抛出特定的 C++ 异常时,我可以跳过中断吗?