如果我这样做:
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未来版本中消失的怪癖?
1条答案
按热度按时间mzmfm0qo1#
这里有两个概念,不要混淆:
1.参数/数组解包
1.变长参数列表
当你调用你的函数时,第一个运算符将数组解包成一个参数列表。如果数组是关联的,它将解包成一个命名参数列表。
第二个标记将参数列表重新组合成数组,所以函数的参数以数组的形式出现,给定的参数被命名,你就得到了一个关联数组,你可以通过在$params前后添加一些参数来了解它的工作原理,比如
在PHP 8之前,并不总是允许使用字符串键解包数组,并且支持命名参数。
FYI如果你想搜索PHP的标准,你需要在PHP的rfc站点搜索,这里有与问题相关的文章: