【问题标题】:PHPDoc: Documenting a function with a variable number of argumentsPHPDoc:用可变数量的参数记录函数
【发布时间】:2013-01-08 22:02:03
【问题描述】:

记录接受可变数量参数的类方法的推荐方法是什么?

也许是这样的?

<?php

class Foo {
    /**
     * Calculates the sum of all the arguments.
     *
     * @param mixed [$arg1, $arg2, ...]
     *
     * @return float the calculated sum
     */
    public static function sum() {
        return array_sum(func_get_args());
    }
}

注意:作为一般规则,我认为应尽可能避免此类事情。话虽如此,最好还是把剩下的几个无法避免的情况记录下来。

【问题讨论】:

    标签: php phpdoc


    【解决方案1】:

    如果您使用可变数量的参数并且还使用PHP &gt;= 5.6,那么您可以使用仍然符合已经提到的 PHPDoc ,... 语法的可变参数函数(允许可变数量的参数),并且 PHPStorm 将解释文档也正确。使用可变参数函数无需func_get_args() 将参数捕获到数组中。

    /**
     * @param mixed $args,... Explainatorium!
     */
    function variadiculous(...$args) {
        // NOTE: $args === func_get_args()
        foreach ( $args as $arg ) {
            /* do work */
        }
    }
    

    PHPStorm 将自动生成文档为@param array $args,因为从技术上讲,在函数内部variadiculous is_array($args) 为真。我将其更改为如上所述的@param mixed $args,...,当我使用热键在我的代码中的其他位置显示函数签名时,PHPStorm 显示variadiculous($args : ...array|mixed)——如果您使用 PHP >= 5.6,我建议使用此方法

    【讨论】:

      【解决方案2】:
      /**
       * @param mixed $numbers,... Description
       */
      Public function sum ($numbers)
      

      在方法中,不会使用$numbers。

      【讨论】:

      【解决方案3】:

      对于... syntax,PHPStorm 2017.1 使用:

      /**
       * @param Type[] ...$values One or more values.
       */
      public function func(Type ...$values) {
          // ...
      }
      

      【讨论】:

      • 这似乎是有问题的描述,因为它暗示您应该将数组作为不正确的参数传递。
      • 一目了然,直到您注意到紧随其后的...
      • 好吧,我没注意到 ;) 一个奇怪的符号
      • 此问题已在 2018.1.7 中修复(根据 youtrack.jetbrains.com/issue/WI-29429)。现在 DocBlock 应该匹配方法签名:@param Type ...$values One or more values.
      【解决方案4】:

      值得注意的是,使用 doc 块,例如:

      /**
       * @param Type[] ...$values One or more values.
       */
      public function func(Type ...$values) {
          // ...
      }
      

      ...看起来您可以传递Type 的数组,例如

      Foo()->func([Type, Type, Type])
      

      ...这会引发一个致命错误,显然是现在。

      地点:

      Foo()->func(...[Type, Type, Type])
      

      ...不像您在方法调用时对其进行了解构。

      无论如何,这里的重点是我正在试验 PHPStorm 如何处理 doc 块,并且取决于您在 doc 块中定位 $args 变量的方式,...$args$args,... 确定您在 IDE 中获得的提示类型。

      如果你有一个可选长度的函数/方法参数,我真的想要一种方法来建议你应该按名称传递给方法的值,其中它们应该具有特定的顺序被通过。

      您可能会想,“只需设置默认参数,$arg1 = 'default', $arg2 = true”这通常是有道理的,但在某些情况下

      伪例子:

      /**
       * @param int ...$args Hour, Minute, Second, Timezone, $arg [, ...$args]
       */
      public static function createA(int ...$args) {}
      
      /**
       * @param int $args,... Hour, Minute, Second, Timezone, $arg [, ...$args]
       */
      public static function createB(int ...$args) {}
      
      /**
       * @param int[]|int $args,... Hour, Minute, Second, Timezone, $arg [, ...$args]
       */
      
      public static function createC(int ...$args) {}
      

      ...所以:

      ...是正确答案(请记住方向:...$args$args,...

      【讨论】:

        猜你喜欢
        • 2013-07-21
        • 1970-01-01
        • 2011-04-05
        • 2011-01-01
        • 2012-11-06
        • 1970-01-01
        • 2014-07-15
        • 1970-01-01
        • 2011-12-24
        相关资源
        最近更新 更多