我需要用arguments数组调用一个函数,但call_user_func_array对我来说似乎很慢。
我尝试使用ReflectionFunction
(请参阅code ex. 1
),但是可能还有其他方法吗?如果该方法支持已排序的参数,那将是完美的(参见code ex. 2
)
private static function call(Callable $callable, array $args) {
if(class_exists('ReflectionFunction', false)) {
$r = (new ReflectionFunction($callable))->invokeArgs($args);
# ROUTES_CALLBACK_STRATEGY may be "call" or "echo"
if(defined('ROUTES_CALLBACK_STRATEGY') && strtolower(ROUTES_CALLBACK_STRATEGY) == 'call') {
return;
} else {
echo $r;
}
} else {
call_user_func_array($callable, $args);
}
}
代码ex。 2
$args = array(
'param1' => 'p1',
'param2' => 'p2',
'custom_name' => 'c_n'
);
$callback = function($param, $other_param, $foo) {
echo $param . " " . $other_param . " " . $foo; // output: p1 p2 c_n
}
$callback2 = function ($custom_name, $param1, $param2) {
echo $custom_name . " " . $param1 . " " . $param2; // output: c_n p1 p2
}
<小时/> 谢谢你的帮助。
答案 0 :(得分:1)