На данный момент у меня есть что-то вроде этого
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'
который передается функции в этом порядке. Однако есть ли способ, чтобы ключи к аргументам соответствовали именам аргументов функций. как ['hello'] => 'string1', ['world'] => 'string2', ['blah'] => 'string3'
где они могут быть в любом порядке и соответствовать правильному имени аргумента по ключу?
Довольно некоторые накладные расходы, но возможно:
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 :)
ReflectionMethod::getParameters()
. Не реальная проблема, чтобы написать что-то для этого, но учтите, что это создает некоторые накладные расходы.