PHP,error_reporting(),6143也触发E_DEPRECATED(8192)

时间:2013-11-06 08:26:20

标签: php error-handling

当我使用$notice下面的(简化)错误处理时,它会捕获E_DEPRECATED(8192)错误。

使用$notice,值为6143,其位掩码为:

0001011111111111

这不包括E_DEPRECATED的位,如下所示。

0010000000000000

我不明白为什么这个错误处理也会捕获E_DEPRECATED(8192)错误。

$error   = (int)            E_ERROR | E_CORE_ERROR | E_COMPILE_ERROR | E_RECOVERABLE_ERROR | E_PARSE | E_USER_ERROR;
$warning = (int) $error   | E_WARNING | E_CORE_WARNING | E_COMPILE_WARNING | E_USER_WARNING;
$notice  = (int) $warning | E_NOTICE | E_USER_NOTICE;
$all     = (int) $notice  | E_STRICT | E_DEPRECATED | E_USER_DEPRECATED;

function error_handler($errno, $errstr, $errfile, $errline ) {
    echo "$errno - $errfile:$errline $errstr") ;
}

error_reporting($notice);
set_error_handler("error_handler");

2 个答案:

答案 0 :(得分:0)

默认情况下,每个错误都会调用错误处理程序。为了将error_reporting级别考虑在内,您需要手动执行此操作:

function error_handler($errno, $errstr, $errfile, $errline ) {
    if (!(error_reporting() & $errno)) {
        return;
    }
    echo "$errno - $errfile:$errline $errstr") ;
}

此外,您可以在绑定时限制错误级别。在你的情况下:

set_error_handler("error_handler", $notice);

有关详细信息,请参阅documentation

答案 1 :(得分:-1)

使用此

<?php error_reporting(E_ALL ^ E_WARNING)?>