Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.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 set_error_handler()始终返回null_Php_Error Handling - Fatal编程技术网

PHP set_error_handler()始终返回null

PHP set_error_handler()始终返回null,php,error-handling,Php,Error Handling,我搞不清楚出了什么问题 以下总是导致输出“无法设置错误处理程序”: 因为执行此函数需要有一个错误,如果在执行脚本之前发生错误,则无法调用自定义错误处理程序,因为它当时未注册 function die_on_error($errno, $errstr, $errfile, $errline, $errcontext){ echo"This is sparta"; echo "\n\n\$errno: $errno"; echo "\n\n\$errstr: $errstr"

我搞不清楚出了什么问题

以下总是导致输出“无法设置错误处理程序”:


因为执行此函数需要有一个错误,如果在执行脚本之前发生错误,则无法调用自定义错误处理程序,因为它当时未注册

function die_on_error($errno, $errstr, $errfile, $errline, $errcontext){
    echo"This is sparta";
    echo "\n\n\$errno: $errno";
    echo "\n\n\$errstr: $errstr";
    echo "\n\n\$errfile: $errfile";
    echo "\n\n\$errline: $errline";
    echo "\n\n\$errcontext: ";
    var_dump($errcontext);
    die();
}

 print_r(set_error_handler('die_on_error'));

trigger_error("Incorrect  array", E_USER_WARNING);

我有一个复杂的单例类来处理错误,但我也想知道一切都正常

我的解决方案是使错误报告静音,并使用要检查的特定字符串触发一个错误,然后将类中的一个变量设置为true并进行检查

差不多

class myerror
{
    private $enabled;

    public function __construct()
    {
       if ($this->set_handler() === false) die('Error Handler Failed To Init...');
    }

    private function set_handler()
    {
        $methodVariable = array('myerror', 'error_handler');
        if (is_callable($methodVariable, true, $callable_name) === false return false;
        @set_error_handler($callable_name, E_ALL);
        trigger_error('Error Init', E_USER_NOTICE);
        return $this->enabled;
    }

    public static function error_handler($errNo, $errStr, $errFile, $errLine)
    {
        if($errStr == 'Error Init')
        {
            $this->enabled = true;
            return;
        }
        // do something with the error
    }
}
这只是一个未经测试的示例,但我希望它能让您了解我是如何解决问题的。
:)

您是否真的生成了错误?请尝试使用
ob_start('die_on_error')很好,它可以工作。但我不明白!首先,在这两个代码中,
die\u on\u error
是在调用
set\u error\u handler
之前定义的。其次,在这两种情况下,在
set\u error\u handler
之前都不会发生错误。我真的很蠢
set_error_handler
即使成功设置了自定义错误处理程序(如果前面的错误处理程序是PHP默认的),也会返回null。它不会返回null的唯一时间是,如果您用其他内容替换自定义错误处理程序。。。你在我评论之前就知道了,很好的研发人员
class myerror
{
    private $enabled;

    public function __construct()
    {
       if ($this->set_handler() === false) die('Error Handler Failed To Init...');
    }

    private function set_handler()
    {
        $methodVariable = array('myerror', 'error_handler');
        if (is_callable($methodVariable, true, $callable_name) === false return false;
        @set_error_handler($callable_name, E_ALL);
        trigger_error('Error Init', E_USER_NOTICE);
        return $this->enabled;
    }

    public static function error_handler($errNo, $errStr, $errFile, $errLine)
    {
        if($errStr == 'Error Init')
        {
            $this->enabled = true;
            return;
        }
        // do something with the error
    }
}