Autocomplete 如何在DocBlock中声明无限/可变参数?

Autocomplete 如何在DocBlock中声明无限/可变参数?,autocomplete,ide,documentation,docblocks,Autocomplete,Ide,Documentation,Docblocks,假设我有一个函数(显然是一个简单的例子): 现在我知道我可以把它修改成 public function dot(array $items){ return implode('.', $array); } 但有些功能不是一个选项。那么,您将如何使用docBlock记录函数的第一个版本,以便IDE可以解释它可以接收无限的参数 我看到了一些使用的方法: /** * Joins one or more strings together with a . (dot) * @param str

假设我有一个函数(显然是一个简单的例子):

现在我知道我可以把它修改成

public function dot(array $items){
    return implode('.', $array);
}
但有些功能不是一个选项。那么,您将如何使用docBlock记录函数的第一个版本,以便IDE可以解释它可以接收无限的参数

我看到了一些使用的方法:

/**
 * Joins one or more strings together with a . (dot)
 * @param string $string1
 * @param string $string2
 * @param string $_ [optional]
 * @return string
 */
public function dot($string1, $string2, $_ = null) {
    return implode('.', func_get_args());
}
在IDE中看起来像


但这对我来说就像是一种黑客行为,仅仅使用docBlock是没有办法做到的吗?

在php中,valist或“可选参数”列表的概念并不存在

$\uu
变量将只包含您给出的第三个字符串。 允许数组或字符串的唯一方法是使用
is\u array()

既然你已经处理了你想要的行为,你就必须记录下来。在php中,由于不允许重载,如果要提供多个类型,则约定使用“mixed”作为类型

/**
*@param mixed $arg1 an array, iterator that will be joined OR first string of the list
*@return string a string with all strings of the list joined with a point
*@example dot("1","2","3"); returns 1.2.3 dot(array(1,2,3)); returns 1.2.3
*/
而且,根据你所说的,你可以用

/**
*@param string ... list of strings
*/

[更新日期2015-01-08]

在PHPDoc中执行此操作的旧方法是:

但是,这不再受支持。从PHP5.6开始,可变方法参数是PHP语言的一部分,PHPDoc已经更新,以反映从PHPDoc 2.4开始的情况(如果我没有记错的话)。从EAP 139.659开始,这也在PhpStorm IDE中(应在8.0.2及更高版本中)。不确定其他IDE的实现

在任何情况下,对于可变参数,DocBlocks的正确语法如下:

/**
 * @param int ...$param
 **/
在PHP5.6中实现的,PHPDocumentor应支持以下语法

这应该是描述此类签名的正确方式。这将包括在计划中。一旦这一点被接受,IDE应该遵循以支持这一“官方”建议


然而,在某些时候,一些IDE对他们认为正确的东西有了更好的理解。强烈抨击IDE供应商,以支持5.6版支持的官方PHP语法,或同时使用任何有效的语法。

我编辑了我的答案,因为我发现了更符合您问题的内容。这是一个很好的问题,但我花了一段时间才找到。我可以建议在标题中加上“variadic”一词,以便更容易找到吗?
/**
*@param string ... list of strings
*/
/**
 * @param int $param,...
 **/
/**
 * @param int ...$param
 **/
/**
 * @param Type ...$value
 * Note: PHP 5.6+ syntax equal to func_get_args()
 */
public function abc(Type ...$value) {}