如何将所有参数传递给我的回调函数?

时间:2014-11-20 14:39:05

标签: php

我的类中有一个函数,它将回调函数作为参数。

但我想将 n 其他参数传递给回调:

$myClass->each(function($result,$arg1,$arg2,$arg3){

   echo $arg2; //expected: bar

},'foo','bar',85);

我想要实现的目标:

class myClass {

    public function each() {

        $callback = func_get_arg(0);
        $args = array_slice(func_get_args(), 1); //_____
                                                 //     |
        if (is_callable($callback)) {            //     |  I have $args
            foreach ($this->results as $result) {//     |  But how can I pass
                  $callback($result,...$args);   //     |  them to $callback
            }                     // ^                  |  as a set of args?
        }                         // |__________________| 
    }

}

请注意我使用的是PHP 5.4,因此我无法使用...运算符

1 个答案:

答案 0 :(得分:3)

我相信答案是call_user_func_array。我知道在splat运算符时代看起来有点过时,但我认为它是5.4中的最佳选择。

public function each() {
    $callback = func_get_arg(0);
    $args = func_get_args();

    if (is_callable($callback)) {            
        foreach ($this->results as $result) {
              $args[0] = $result;
              call_user_func_array($callback, $args);
        }                  
    }                       
}

这只会覆盖$args(我们不想要的)中的第一项,并使用相应的$result值。