调用调用使用可选参数
的set_error_handler
功能在PHP调用用户调用一个可调用作为第一个函数参数。我写了一个类,在调用这个其他函数之前必须完成一些指令。我写这样的:调用调用使用可选参数
$errorCollector = new ErrorCollector();
set_error_handler(
call_user_func_array(
array($errorCollector, 'collect'),
array(function($error) {
//some instructions with $error
}))
);
从$errorCollector
类collect()
函数获取调用,这需要一个非可选参数,它是一个函数。
的collect()
函数具有其他4个参数,$errno
,$errstr
,$errfile
,和$errline
。这些参数在set_error_handler
函数中填写错误信息。当调用与在set_error_handler
功能这些参数可调用的,你不需要填写这些
类与功能如下:
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);
}
}
当我跑我的一段代码,我得到以下错误:
Warning: Missing argument 2 for ErrorCollector::collect() in C:\ErrorCollector.php on line 13
Warning: Missing argument 3 for ErrorCollector::collect() in C:\ErrorCollector.php on line 13
Warning: Missing argument 4 for ErrorCollector::collect() in C:\ErrorCollector.php on line 13
Warning: Missing argument 5 for ErrorCollector::collect() in C:\ErrorCollector.php on line 13
(缩短了文件的URL为更好的阅读)
而参数是可选的第为什么我得到这个错误e set_error_handler
功能?我可以使用可选参数调用可调用吗?
您错误地定义了错误处理程序。定义像这样:
set_error_handler(
array($errorCollector, 'collect'),
);
我不认为这会工作,它只会抛出一个错误,你没有给'set_error_handler'函数提供正确的参数。 – Bas
'ErrorCollector :: collect'有5个必需的参数。但是你只传递一个 - 'array(function($ error){//一些指令带有$ error}))' – maximkou
@maximkou是的,但是我怎么让其他4个可选?因为这些在'set_error_handler'函数中是可选的。 – Bas
为参数设置默认值。就像这样:'公共功能集(可调用$的HandleError,$错误号= NULL,$ errstr = NULL,$ ERRFILE = NULL,$ errline = NULL)' – maximkou