我的类中有一个函数,它将回调函数作为参数。
但我想将 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,因此我无法使用...
运算符
答案 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
值。