为什么这不是有效的回调

时间:2017-08-14 08:48:28

标签: php error-handling callback

我正在尝试设置自定义错误处理程序,但会出现以下错误

Warning: set_error_handler() expects the argument (error::handler) to be a valid callback

这是我调用set_error_handler函数

的地方
    require_once( 'autoloader.php' );
set_error_handler( array( error::class, "handler" ) ); 

class error {

    static public  $allErrors;
    static private $err;

    public static function handler( $errno, $errstr, $errfile, $errline, $errcontext ) {
        global $errors;
        if ( $errors == 1 || ( $errors == 2 && $errno == E_WARNING ) ) {
            if ( $errno == E_ERROR || substr( $errstr, 0, 6 ) == 'mysqli' ) {
                ?>
                <div class='errorbox' style='background: #990000;padding: 10px; color: #FFF; font-size: 10px;'><strong><?= $errstr ?></strong><br/><br/>
                FILE: <?= $errfile ?> <br/>
                LINE: <?= $errline ?> <br/><?
                ?>
                <pre>INFO: <?= print_r( $errcontext, true ) ?></pre></div><br/><?
            } else {
                ?><br/><font color='blue'><strong><?= $errstr ?></strong><br/>
                    FILE: <?= $errfile ?> <br/>
                    LINE: <?= $errline ?> <br/></font><br/><?
            }
        }
    }
}

错误类位于另一个文件中,并且我没有在整个类中复制。我一直在网上阅读,我似乎正在正确地调用这个方法所以我不确定为什么我会收到警告 - 任何人都可以解释并告诉我如何修复

1 个答案:

答案 0 :(得分:1)

我猜你使用的是PHP 7.它引入了一个名为Error的新类。

由于此类已存在,因此您的自定义类error不会自动加载。常量error::class解析为标准Error类的名称,但此类不定义任何handler方法,因此出现错误消息。

为错误处理类使用其他名称或将其放入namespace