You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 14:05:47