4
function myFunc($x, $y) {
    echo "x : {$x}";
    echo "y : {$y}";
}
$params = array("y" => 1, "x" => 2);

是否可以myFunc像使用call_user_func_array函数一样调用但数组的键会自动在函数中设置正确的参数?是否有任何功能可以执行此操作,或者是否可以创建此功能?例如 :

call_func('myFunc', $params);

结果是这样的

x : 2
y : 1

谢谢。

4

2 回答 2

7

可能有一种更简单的方法可以做到这一点,但反射也应该起作用:

function call_func_keys($functionName, $args) {
    $f = new ReflectionFunction($functionName);
    $inOrder = array();

    foreach($f->getParameters() as $param) {
        if(array_key_exists($param->name, $args)) {
            $inOrder[] = $args[$param->name];
        } else {
            $inOrder[] = $param->getDefaultValue(); # Will throw a reflection exception if not optional
        }
    }

    call_user_func_array($functionName, $inOrder);
}

这是一个演示。

于 2012-12-06T15:11:01.977 回答
1

更新!

通常你应该使用call_user_func_array函数。

它应该这样使用:

function myFunc($x, $y) {
   echo "x : {$x}";
   echo "y : {$y}";
}
$params = array("y" => 1, "x" => 2);

call_user_func_array('myFunc', $params);

但在你的情况下,你肯定会使用Reflection. @minitech 的答案很棒。

于 2012-12-06T15:09:22.340 回答