在PHP中将关联数组传递给函数

9

我很想知道是否有一种方式可以使用关联数组来声明参数来调用函数。

例如,如果我有这个函数:

function test($hello, $world) {
    echo $hello . $world;
}

有没有一种像这样调用它的方法?
call('test', array('hello' => 'First value', 'world' => 'Second value'));

我熟悉使用call_user_funccall_user_func_array,但我正在寻找更通用的方法,以便在不提前知道它们所需参数的情况下调用各种方法。
编辑: 这样做的原因是为API前端创建一个单一接口。我接受JSON并将其转换为数组。因此,我希望调用不同的方法并将JSON输入中的值传递到这些方法中。 由于我想从此接口调用各种不同的方法,因此我需要一种在不知道它们所需参数顺序的情况下传递参数的方法。我认为使用反射可以得到我想要的结果。

你想做这件事情的原因是什么? - John Conde
这是一个用于API前端的内容。我接受JSON并将其转换为数组。因此,我希望能调用不同的方法,并将JSON输入中的值传递给这些方法。 - cbulock
4个回答

4

在 PHP 5.4+,此功能可用。

function test($assocArr){
  foreach( $assocArr as $key=>$value ){
    echo $key . ' ' . $value . ' ';
  }
}

test(['hello'=>'world', 'lorem'=>'ipsum']);

3

请查看php手册的call_user_func_array

此外,查找令牌运算符(...)。这是一种在PHP函数中使用可变参数的方法。您可以声明类似于以下内容:

function func( ...$params)
{
    echo $params[0] . ',' . parama[1];
}

2
您可以在自己的函数内部使用这个函数func_get_args()
所以,您可以像这样使用它:
function test() {
     $arg_list = func_get_args();
     echo $arg_list[0].' '.$arg_list[1]; 
}

test('hello', 'world');

1
以下应该可以工作...
function test($hello, $world) {
  echo $hello . $world;
}

$callback = 'test'; <-- lambdas also work here, BTW

$parameters = array('hello' => 'First value', 'world' => 'Second value');

$reflection = new ReflectionFunction($callback);
$new_parameters = array();

foreach ($reflection->getParameters() as $parameter) {
  $new_parameters[] = $parameters[$parameter->name];
}

$parameters = $new_parameters;

call_user_func_array($callback, $parameters);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接