2

以下の(簡略化された)エラー処理を使用すると、 (8192)エラー$noticeがキャッチされます。E_DEPRECATED

$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");
4

2 に答える 2

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);

詳細については、ドキュメントを参照してください。

于 2013-11-06T08:33:59.787 に答える