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

使用Splat语法传递关联数组作为函数参数的行为疑问

PHP可变参数展开保留数组键的行为说明

先看你给出的代码:

function myfunc(mixed ...$var) {
  dump($var);
}

$param = [
  'one' => 1,
  'two' => 2,
];
myfunc(...$param);

执行后输出保留了数组的键名:

^ array:2 [
  "one" => 1
  "two" => 2
]

针对你的疑问,明确说明:

  • 这是PHP官方有意设计的稳定行为,不是临时特性,未来版本不会随意移除。
  • 虽然你在可变参数的直接文档章节没找到相关描述,但PHP的数组展开(...操作符)语法规范里,明确包含了这个规则:当把关联数组展开到使用...$var收集参数的函数中时,会完整保留原数组的键值对结构。
  • 这个特性从PHP 5.6引入可变参数和数组展开语法时就存在,多年来一直保持稳定,属于语言的标准特性。
  • 额外补充:如果函数是固定数量的位置参数,展开关联数组时会忽略键名,只按顺序传递值;只有当用可变参数...$var收集时,才会保留键名。

内容的提问来源于stack exchange,提问作者joachim

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 16:10:01