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_alltoken_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 的可变长度参数 `...` 标记应该被称为啥?的主要内容,如果未能解决你的问题,请参考以下文章

PHP 可变长度参数列表

php可变长度参数

在其内存应该已被释放后访问可变长度数组

Java Varargs 可变参数使用

Scala函数使用可变参数

用于可变长度参数数组的 PHPDoc