Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 异常代码的严重性_Php_Exception_Error Handling_Error Code - Fatal编程技术网

Php 异常代码的严重性

Php 异常代码的严重性,php,exception,error-handling,error-code,Php,Exception,Error Handling,Error Code,我正在尝试整理错误和异常处理程序。有一个致命的错误,我给自己发了一条短信,还有一个错误,我收到了一封电子邮件。(我在末尾添加了数组,以防它们有用。) 对于错误,我没有找到任何类似的异常 我相信我可以设置自己的异常值,但是对于一般异常、PDOExceptions等是否有约定的严重性级别。我发现唯一提到严重性的地方是ErrorException。(我目前只使用PDO异常,但正在尝试捕获其他“一般”异常。) 是否有严重性帮助表?我坦率地承认,我正在与例外情况作斗争 PS我看了一下,但这看起来像是针对作

我正在尝试整理错误和异常处理程序。有一个致命的错误,我给自己发了一条短信,还有一个错误,我收到了一封电子邮件。(我在末尾添加了数组,以防它们有用。)

对于错误,我没有找到任何类似的异常

我相信我可以设置自己的异常值,但是对于一般异常、
PDOExceptions
等是否有约定的严重性级别。我发现唯一提到严重性的地方是
ErrorException
。(我目前只使用PDO异常,但正在尝试捕获其他“一般”异常。)

是否有严重性帮助表?我坦率地承认,我正在与例外情况作斗争

PS我看了一下,但这看起来像是针对作为异常发送的错误。我现在很困惑


错误代码数组,以防它们有用

$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 

根据评论,对于例外情况的一般建议是,您应该将它们全部捕获——从这个意义上说,所有未处理的异常都是严重的

但是,您仍然可以按照自己的方式对系统中的异常进行分类。假设在应用程序的顶层,您有一个进入主应用程序的呼叫:

try
{
    $this->mainApp();
}
catch (SeriousRuntimeException $e)
{
    $this->handleSeriousError($e);
}
catch (TrivialRuntimeException $e)
{
    $this->handleTrivialError($e);
}
然后在代码中,您可以抛出一个
SeriousRuntimeException
或一个
trialityruntimeexception
,这是您认为合适的。在某些情况下,您将需要处理外部异常,并且您需要像这样转换它们:

try
{
    $this->databaseOperation();
}
catch (PDOException $e)
{
    // Copy the exception properties that are important to you.
    // Throw the appropriate severity based on what handler you
    // want to run.
    throw new SeriousRuntimeException($e->getMessage());
}
在本例中,我假设这两种异常类型都是致命的,但它们的处理方式不同。可以想象,您可能会遇到一种异常类型,这种异常类型非常简单,以至于应用程序一直在运行(例如,在侦听器循环中,它记录故障,然后继续运行)。

异常 让我在这里澄清一些误解


是否存在异常的严重性代码

否。所有异常都是严重的。
异常将停止脚本的执行。如果前面的代码无法执行,它们用于阻止执行后面的代码

我如何知道它们是否重要

所有例外都很重要。当一个异常被触发时,它会告诉您作为一个开发人员,代码中发生了一些意想不到的事情。您编写的代码根本没有预料到会发生这种情况,为了防止未定义的行为,应该立即停止处理

未处理的异常将显示为PHP警告。-

事实并非如此。任何未处理的异常都将转换为。如果您的应用程序不知道如何处理异常情况,那么PHP必须立即停止!这不是一个你可以忽略或沉默的警告;这是一个致命的错误

根据经验,我应该将异常视为致命错误

不一定。在极少数情况下,开发人员可能希望某个特定代码段引发异常,而异常可以从中恢复或解决。代码逻辑预测出一些错误,并有办法解决问题。如果捕获并处理了异常,则不会导致致命错误

异常和致命错误之间的区别在于,您可以捕获异常并从中恢复,但不能从致命错误中恢复

所以,如果我什么都不做,那么异常就会变成错误

如果您没有捕获异常,并且没有实现自己的错误处理,那么PHP将默认为内置错误处理程序。逻辑是它将停止脚本并抛出一个错误,异常作为消息。然后,根据您的配置设置,此错误将被记录到服务器上或显示给用户

错误 PHP有一段糟糕的历史。早期PHP版本的一个问题是,对于编写糟糕的代码,它非常宽容。它要么尝试猜测正确的操作应该是什么,要么只是警告用户一些严重的问题。其结果是,许多开发人员学会了简单地忽略警告、通知,有时甚至错误

对于PHP7,几乎没有什么变化

PHP7改变了PHP报告大多数错误的方式。现在大多数错误都是通过抛出异常来报告的,而不是通过PHP5使用的传统错误报告机制来报告错误。错误仍然不是异常,但其行为与异常类似。您可以捕获错误,如果不捕获,您仍然会看到“致命错误:未捕获错误:…”

现代PHP功能现在将使用异常。这意味着userland代码也应该尝试遵循相同的方法。当代码应该停止执行时抛出异常(不要为此使用
die/exit
),只有在知道如何恢复时才捕获异常


在未来的PHP版本中,通知和警告可能会更改为错误异常。现在不要忽视它们。将所有这些问题视为代码中的严重问题,并立即解决。

您的问题是什么?是否存在异常的严重性代码。否,异常没有代码。它们被组织在一个类层次结构中。哦,好吧-那么我如何知道它们是否重要(没有写入数据库)而不是相当平凡(你的驼峰字必须转换成所有小写)如果存在的话。由于某种原因,我根本无法理解例外情况。错误看起来很简单。通常异常都很严重,因为如果您没有捕捉到它们,它们将停止脚本。