调用调用使用可选参数

问题描述:

set_error_handler功能在PHP调用用户调用一个可调用作为第一个函数参数。我写了一个类,在调用这个其他函数之前必须完成一些指令。我写这样的:调用调用使用可选参数

$errorCollector = new ErrorCollector(); 
set_error_handler(
    call_user_func_array(
     array($errorCollector, 'collect'), 
     array(function($error) { 
      //some instructions with $error 
     })) 
); 

$errorCollectorcollect()函数获取调用,这需要一个非可选参数,它是一个函数。

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功能?我可以使用可选参数调用可调用吗?

+0

'ErrorCollector :: collect'有5个必需的参数。但是你只传递一个 - 'array(function($ error){//一些指令带有$ error}))' – maximkou

+0

@maximkou是的,但是我怎么让其他4个可选?因为这些在'set_error_handler'函数中是可选的。 – Bas

+0

为参数设置默认值。就像这样:'公共功能集(可调用$的HandleError,$错误号= NULL,$ errstr = NULL,$ ERRFILE = NULL,$ errline = NULL)' – maximkou

您错误地定义了错误处理程序。定义像这样:

set_error_handler(
    array($errorCollector, 'collect'), 
); 
+0

我不认为这会工作,它只会抛出一个错误,你没有给'set_error_handler'函数提供正确的参数。 – Bas