8

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

例如,如果我有这个功能:

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

有什么方法可以称之为做这样的事情吗?

call('test', array('hello' => 'First value', 'world' => 'Second value'));

我熟悉使用call_user_funcand call_user_func_array,但我正在寻找更通用的东西,当我不知道他们提前寻找什么参数时,我可以用它来调用各种方法。

编辑:这样做的原因是为 API 前端制作单个接口。我接受 JSON 并将其转换为数组。因此,我希望调用不同的方法并将 JSON 输入中的值传递给方法。因为我希望能够从这个接口调用各种不同的方法,所以我想要一种将参数传递给函数的方法,而不知道它们需要按什么顺序。我在想使用反射会给我带来我的结果米找。

4

4 回答 4

4

使用 PHP 5.4+,这工作

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

test(['hello'=>'world', 'lorem'=>'ipsum']);
于 2015-08-04T15:32:20.203 回答
3

检查 php 手册中的call_user_func_array

另外,查找令牌运算符 (...)。这是一种在 PHP 中将可变参数与函数一起使用的方法。您可以声明如下内容:-

function func( ...$params)
{
    echo $params[0] . ',' . parama[1];
}
于 2013-03-30T16:21:01.440 回答
2

您可以在函数func_get_args()内部使用此函数

所以,你可以像这样使用它:

function test() {
     $arg_list = func_get_args();
     echo $arg_list[0].' '.$arg_list[1]; 
}

test('hello', 'world');
于 2013-03-30T16:21:41.297 回答
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);
于 2017-01-07T23:02:09.417 回答