使用可选参数调用callable

时间:2016-05-17 15:51:48

标签: php function oop

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吗?

1 个答案:

答案 0 :(得分:0)

你错误定义了错误处理程序。定义如下:

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