PHP 的可变长度参数 `...` 标记应该被称为啥?
Posted
技术标签:
【中文标题】PHP 的可变长度参数 `...` 标记应该被称为啥?【英文标题】:What should PHP's variable-length argument `...` token be referred to as?PHP 的可变长度参数 `...` 标记应该被称为什么? 【发布时间】:2018-11-17 13:20:43 【问题描述】:我最近了解了 php 的 ... 标记(参考 docs),它用于支持可变长度参数列表。这个标记的术语是什么或它是如何发音的?如果它没有名称,它们是否在另一种有名称的语言中具有类似的功能?
【问题讨论】:
我不明白你在问什么发音? 复制:***.com/questions/41124015/… 来自php.net/manual/en/… - 可能是splat? 显然是splat。 php.net/manual/en/functions.arguments.php 中没有提到一次“splat”这个词,但我想这和任何一个词一样好。 【参考方案1】:TL;DR:标记名称是“T_ELLIPSIS”,在函数声明中使用使该函数成为“可变参数”,在调用带有包含参数的数组的函数时使用,称为“参数解包”。
它的名字是T_ELLIPSIS
,我发现在psysh-session中使用token_get_all
和token_name
:
>>> token_get_all('<?php function testit(...$a) echo $args;')
=> [
[
379,
"<?php ",
1,
],
....
[
391,
"...",
1,
],
....
>>> token_name(391)
=> "T_ELLIPSIS"
>>>
编辑:我可能太从字面上理解你了——我以为你问的是令牌名称,但考虑到反对票,我怀疑你的意思是,程序员如何在语音和写作中引用它(显然是“splat ",根据 cmets)
编辑 2:在最后一个参数之前的函数定义中使用,在其他语言中,在 PHP 中用省略号定义的函数将被称为“可变参数函数”:
>>> function f(...$a) return $a;
>>> f(1, 2, 3, 4)
=> [
1,
2,
3,
4,
]
>>>
编辑3:最后:如果你有一个数组保存着你想要传递给函数的值,你可以使用...
来实现“参数解包”
>>> function f($a, $b, $c) return "$a-$b-$c";
>>> f(...[1,2,3]);
=> "1-2-3"
>>>
【讨论】:
这不是PHP定义的常量名吗?我认为 OP 正在询问此类操作的实际术语。 “省略号”一词在php.net/manual/en/functions.arguments.php 中也没有被引用一次,但是,感觉它比“splat”更能描述功能,并且会喜欢使用“ellipsiser”或其他东西。话又说回来,splat 可能更有趣……也许把这两个词混在一起? '参数解包' 刚刚收到一个 PHP 错误PHP Fatal error: Variadic parameter cannot have a default value
。似乎 PHP 也使用了这个术语。我很欣赏你的帖子。以上是关于PHP 的可变长度参数 `...` 标记应该被称为啥?的主要内容,如果未能解决你的问题,请参考以下文章