目前我有这样的事情
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'
,它们可以按任何顺序排列,并通过键与正确的参数名称匹配?
答案 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:)