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


How can I pass all arguments to my callback function?

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

但是我想将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,所以我无法使用 ... 运算符

我相信,答案是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);
        }                  
    }                       
}

这只是用适当的$result值覆盖$args中的第一项(无论如何我们都不希望这样做)。