如何在没有call_user_func_array的情况下使用args数组调用函数?

时间:2015-09-28 19:05:15

标签: php callback

我需要用arguments数组调用一个函数,但call_user_func_array对我来说似乎很慢。 我尝试使用ReflectionFunction(请参阅code ex. 1),但是可能还有其他方法吗?如果该方法支持已排序的参数,那将是完美的(参见code ex. 2

<小时/> 代码ex。 1

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
}

<小时/> 谢谢你的帮助。

1 个答案:

答案 0 :(得分:1)

如果您使用的是PHP 5.6,则可以在调用函数时使用... operator

$callable(...$args);

DEMO:https://3v4l.org/5KUNA