【问题标题】:Optional nullable parameters in PHPDocPHPDoc 中的可选可空参数
【发布时间】:2018-08-10 22:04:26
【问题描述】:

想象一下,我们有一个带有可选可空参数的方法(PHP 7.0),就像这个例子一样:

/**
 * @param Type1 $foo 
 * @param Type2 $bar
 */
 function myFunction(Type1 $foo, Type2 $bar = null)
 {

 }

不幸的是,从 PHPDoc 文档中不清楚,将第二个参数标记为可选和可为空的正确方法是什么。

通常我使用“Type2|null”表示法:

/**
 * @param Type1 $foo 
 * @param Type2|null $bar
 */
 function myFunction(Type1 $foo, Type2 $bar = null)
 {

 }

实际上这是我更喜欢的方式,因为它明确地描述了所有可能的类型。但是如果参数是否可选,我从文档中听到的抱怨并不明显。

我知道,接缝类似于非官方约定“(可选)”

/**
 * @param Type1 $foo 
 * @param Type2 $bar (optional)
 */
 function myFunction(Type1 $foo, Type2 $bar = null)
 {

 }

我不喜欢这种方法,因为从技术上讲,您可以显式提供 NULL 作为第二个参数。并且从 phpdoc 中并不清楚。

一般来说,我什至可以一起使用它们:

 * @param Type2|null $bar (optional)

但它看起来不太好,恕我直言。

您能否提供一些反馈,或者更好的是,提供一些指向相应编码标准/样式指南的链接?

【问题讨论】:

  • 如果你有一个类型(它打算成为一个类),你为什么要把它清空?使函数智能以在开始时进行检查,或者创建具有不同预期参数的附加函数。
  • 这听起来更倾向于基于意见。
  • 这与更改代码无关。可选参数通常有异味。这是关于 phpdoc 标准的。有些人对此有非常强烈的看法,这也让我感到惊讶。

标签: php phpdoc phpdocumentor2


【解决方案1】:

@param Type2|null $bar

是正确的方法,从 phpDocumentor 的角度来看...参见 getOption() 方法的最后三个参数,如 here 所示。

【讨论】:

  • 那么Type2 $bar = 'Default' 怎么样?在那种情况下,@param Type2|null $bar 将是错误的(根据 phpstan)
  • 如果您将可选参数默认为非空值,那么|null 部分将不在您的类型字符串中。相反,标签将是@param Type2|string $bar
  • 天哪。当然 Type2 不是字符串...Type2 $bar = Type2::getDefaultInstance() 更多的是我的想法:)
  • 好吧,既然你不能将这样的函数调用放入原始函数的参数签名中,那么大概你 确实 想要签名中的可选 null ,然后在函数体进行空检查以触发 getDefaultInstance() 标注以填充它。因此,参数标签将与我的答案中的一样,但一些额外的注释可能会强调标注隐式发生(通过参数描述中的内联 {@link} 标签、单独的 @see 标签,甚至是 @ 987654332@ 在自己的描述中使用内联 {@link} 的标签)。
  • 是的,实际上我应该知道这一点。只是想举一个例子来说明我的观点。但我想我陷入了错误的方向。没关系:D
猜你喜欢
  • 2012-11-06
  • 1970-01-01
  • 2010-12-31
  • 1970-01-01
  • 2010-11-26
  • 2011-09-26
  • 2019-12-06
  • 2017-03-16
  • 2011-01-01
相关资源
最近更新 更多