php中带有未定义参数的回调函数和匿名函数

php中带有未定义参数的回调函数和匿名函数,php,callback,anonymous-function,lambda,Php,Callback,Anonymous Function,Lambda,如何使用参数数量未定义的回调函数 我认为最好举个例子: 在我的类中,有两个函数非常相似,只是有几行。我要做的是用公共代码调用函数,并用特定代码传递回调。在处理不同的对象时,我通常使用模板方法模式来实现这一点,但现在不是这样 一些伪代码: public function firstMethod($commonParam, $particularParam) { //some common staff if ($whatever) { //more common st

如何使用参数数量未定义的回调函数

我认为最好举个例子:

在我的类中,有两个函数非常相似,只是有几行。我要做的是用公共代码调用函数,并用特定代码传递回调。在处理不同的对象时,我通常使用模板方法模式来实现这一点,但现在不是这样

一些伪代码:

public function firstMethod($commonParam, $particularParam)
{
    //some common staff
    if ($whatever) {
        //more common staff
        //do something particular with $particularParam
    }

    return $something
}

public function secondMethod($commonParam, $particularParam1, $particularParam2)
{
    //some common staff
    if ($whatever) {
        //more common staff
        //do something particular with $particularParam1 and particularParam2
    }

    return $something
}
现在我想要这样的东西:

public function firstMethod($commonParam, $particularParam)
{
    $lamba = function ($particularParam){
                    //do something particular with $particularParam
                };

    return $this->commonMethod($commonParam, $lambda);
}

public function secondMethod($commonParam, $particularParam1, $particularParam2)
{
    $lamba = function ($particularParam1, $particularParam2){
                    //do something particular with $particularParam1 and $particularParam2
                };

    return $this->commonMethod($commonParam, $lambda);
}

private function commonMethod($commonParam, $callback)
{
    //some common staff
    if ($whatever) {
        //more common staff
        //CALLING $callback. But how can a pass the parameters when it is not the same number for the anonymous functions?
    }

    return $something
}

谢谢。

这取决于您开发应用程序的PHP版本。在PHP5.6.x中,有一个splash操作符。因此,您可以简单地按如下方式使用它:

function bla($foo, ...$params) {
    // $params will be an array with all your parameters
}
在旧版本的PHP中,使用func_get_args()可以得到相同的结果

function bla() {
    $numOfArgs = func_num_args();
    $parameters = func_get_args();

    return $something;
}

// call
$result = bla($param1, $param2, $param3, $param4);