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
}
}