首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用PHP关联数组作为函数调用参数?

如何使用PHP关联数组作为函数调用参数?
EN

Stack Overflow用户
提问于 2020-12-27 02:36:40
回答 2查看 647关注 0票数 2

假设有一个带有某些参数的函数,并且我有一个关联数组(或者一个具有公共属性的简单对象--这几乎是相同的,因为我总是可以使用类型cast (object)$array),其键对应于函数参数名称,其值对应于函数调用参数。我怎么叫它然后把它们传进去?

代码语言:javascript
复制
<?php
function f($b, $a) { echo "$a$b"; }
// notice that the order of args may differ.
$args = ['a' => 1, 'b' => 2];
call_user_func_array('f', $args); // expected output: 12 ; actual output: 21
f($args); // expected output: 12 ; actual output: ↓
// Fatal error: Uncaught ArgumentCountError:
// Too few arguments to function f(), 1 passed
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-12-27 03:19:46

结果,我只需使用PHP8( 解包装 )中引入的名为param解包特性的变量函数:

代码语言:javascript
复制
f(...$args); // output: 12

在PHP 8之前,这段代码会产生错误:Cannot unpack array with string keys

其次,事实证明,call_user_func_array在PHP8中也能正常工作(请参阅朋友以获得解释):

代码语言:javascript
复制
call_user_func_array('f', $args); // output: 12
  • 虽然它仍然输出不正确的'21‘在旧版本。
票数 2
EN

Stack Overflow用户

发布于 2020-12-27 05:48:25

作为PHP旧版本的黑客,您还可以使用反射:

代码语言:javascript
复制
<?php
function test($b, $a) {
  echo "$a$b";
}

$callback = 'test';

$parameters = ['a' => 1, 'b' => 2];

$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);

演示

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65462451

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档