call_user_func_array()args,字符串作为匹配函数args名称的键

时间:2014-11-18 21:27:44

标签: php function

目前我有这样的事情

function callFunction($method, $args) {
    if(method_exists($this, $method)) {
            call_user_func_array(array($this, $method), $args);
    }
}

function myfunction ($hello, $world, $blah) {
}

其中$args是一个像[0] => 'string1', [1] => 'string2', [2] => 'string3'这样的数组,它以该顺序传递给函数。但是,有没有办法让args的键与函数参数名称匹配。比如['hello'] => 'string1', ['world'] => 'string2', ['blah'] => 'string3',它们可以按任何顺序排列,并通过键与正确的参数名称匹配?

1 个答案:

答案 0 :(得分:2)

相当一些开销,但可能:

function callFunction($method, $args) {
    if(method_exists($this, $method)) {
         $arguments = array();
         $reflectionmethod = new ReflectionMethod($this,$method);
         foreach($reflectionmethod->getParameters() as $arg){
             if(isset($args[$arg->name])){
                 $arguments[$arg->name] = $args[$arg->name];
             } else if($arg->isDefaultValueAvailable()){
                 $arguments[$arg->name] = $arg->getDefaultValue();
             } else {
                 $arguments[$arg->name] = null;
             }
         }
         call_user_func_array(array($this, $method), $arguments);
    }
}

function myfunction ($hello, $world, $blah) {
}

通过引用传递的东西虽然如此。您可能需要更多代码才能完成这项工作。长话短说:PHP不是Python:)