PHP 8+如何获取函数的命名参数为关联数组?
PHP 8 如何获取命名参数的关联数组
func_get_args() 只会返回索引数组,不管调用时是否使用命名参数。要获取带参数名的关联数组,可以用以下两种方法:
方法一:手动使用 compact()
如果函数参数不多,直接用 compact() 把参数变量打包成关联数组,简单直接:
function x(string $firstName, string $middleInitial) { return compact('firstName', 'middleInitial'); } x('John', 'J'); // 返回 ['firstName' => 'John', 'middleInitial' => 'J'] x(middleInitial: 'J', firstName: 'John'); // 同样返回 ['firstName' => 'John', 'middleInitial' => 'J']
方法二:利用反射实现通用方案
如果函数参数较多,或者需要通用的工具函数,可以用PHP的反射API自动获取参数名并和参数值对应:
// 通用工具函数,获取当前调用函数的命名参数数组 function getNamedArgs() { // 获取调用当前函数的上层函数信息 $caller = debug_backtrace()[1]; // 反射上层函数 $reflection = new ReflectionFunction($caller['function']); // 获取函数的参数列表 $params = $reflection->getParameters(); // 获取传递的参数值 $args = func_get_args(); $namedArgs = []; foreach ($params as $index => $param) { $namedArgs[$param->getName()] = $args[$index]; } return $namedArgs; } function x(string $firstName, string $middleInitial) { return getNamedArgs(); } x('John', 'J'); // 返回 ['firstName' => 'John', 'middleInitial' => 'J'] x(middleInitial: 'J', firstName: 'John'); // 返回 ['firstName' => 'John', 'middleInitial' => 'J']
注意:PHP目前没有内置函数直接返回命名参数的关联数组,上述两种方法是常用的实现方式。反射方案虽然通用,但性能略低于手动compact的方式,可根据实际场景选择。
内容的提问来源于stack exchange,提问作者Tac Tacelosky
相关产品推荐
相关产品推荐

