php 使用splat通过关联数组传递和接收函数参数

ru9i0ody  于 2023-03-11  发布在  PHP
关注(0)|答案(1)|浏览(126)

如果我这样做:

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

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

则输出为:

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

保留数组键是很有用的,但是我在https://www.php.net/manual/en/functions.arguments.php的文档中没有看到任何关于这方面的内容。
这里发生了什么?这是设计的记录行为,还是一个可能在PHP未来版本中消失的怪癖?

mzmfm0qo

mzmfm0qo1#

这里有两个概念,不要混淆:
1.参数/数组解包

myfunc(...$param);

1.变长参数列表

function myfunc(mixed ...$var)

当你调用你的函数时,第一个运算符将数组解包成一个参数列表。如果数组是关联的,它将解包成一个命名参数列表。
第二个标记将参数列表重新组合成数组,所以函数的参数以数组的形式出现,给定的参数被命名,你就得到了一个关联数组,你可以通过在$params前后添加一些参数来了解它的工作原理,比如

myfunc('positional', ...$param, named: 'value');

在PHP 8之前,并不总是允许使用字符串键解包数组,并且支持命名参数。
FYI如果你想搜索PHP的标准,你需要在PHP的rfc站点搜索,这里有与问题相关的文章:

相关问题