PHP中的set_error_handler
函数调用用户调用callable作为第一个函数参数。我写了一个类,在调用其他函数之前必须完成一些指令。我写得像这样:
$errorCollector = new ErrorCollector();
set_error_handler(
call_user_func_array(
array($errorCollector, 'collect'),
array(function($error) {
//some instructions with $error
}))
);
调用collect()
类中的$errorCollector
函数,这需要一个非可选参数,这是一个函数。
collect()
函数有4个其他参数,$errno
,$errstr
,$errfile
和$errline
。这些是在set_error_handler
函数中填入错误信息的参数。在set_error_handler
函数中调用带有这些参数的callable时,您无需填写这些参数。
具有该功能的类如下所示:
class ErrorCollector
{
private $errors;
public function collect(callable $handleError, $errno, $errstr, $errfile, $errline)
{
$error = array(
'number' => $errno,
'string' => $errstr,
'file' => $errfile,
'line' => $errline,
);
$this->errors[] = $error;
call_user_func($handleError, $error);
}
}
当我运行我的代码时,我收到以下错误:
警告:缺少ErrorCollector :: collect()的参数2 第13行的C:\ ErrorCollector.php
警告:缺少ErrorCollector :: collect()的参数3 第13行的C:\ ErrorCollector.php
警告:缺少ErrorCollector :: collect()的参数4 第13行的C:\ ErrorCollector.php
警告:缺少ErrorCollector :: collect()的参数5 第13行的C:\ ErrorCollector.php
(缩短文件网址以便更好地阅读)
为什么在set_error_handler
函数的参数是可选的时候会出现此错误?我可以使用可选参数调用callable吗?
答案 0 :(得分:0)
你错误定义了错误处理程序。定义如下:
set_error_handler(
array($errorCollector, 'collect'),
);