PHPDoc:@return void必要?
是否真的有必要这样做:
/** * ... * * @return void */
我有很多方法没有返回值,在注释中放入类似的东西似乎是多余的。 它会被认为是不好的forms离开它?
如果文件中明确说明,则将其保留,但不是绝对必要的。 这是一个完全主观的决定。
就个人而言,我会离开它。
编辑
我纠正了。 经过一番Googlesearch, 维基百科页面说:
@return [types描述]这个标签不应该用于用void返回types定义的构造函数或方法。
phpdoc.org网站上说:
@return数据types说明
@return datatype1 | datatype2说明@return标记用于logging函数或方法的返回值。 @returns是@return的别名,用于支持其他自动文档的标签格式
数据types应该是一个有效的PHPtypes (int,string,bool等),返回的对象types的类名,或者简单的“混合”。 如果要显式显示多个可能的返回types,请列出它们不带空格的pipe道分隔符(例如“@return int | string”)。 如果在@return标签中使用类名作为数据types,phpDocumentor将自动创build一个指向该类文档的链接。 另外,如果函数返回多个可能的值,使用|将它们分开 字符,phpDocumentor将parsing出返回值中的任何类名称。 phpDocumentor将显示未经修改的可选描述。
Sooo …基于这个,我想说的是排除这个空白。 至less不符合标准
根据phpDocumentor,@return无效是有效的:
http://www.phpdoc.org/docs/latest/guides/types.html#keywords
…此types通常只在定义方法或函数的返回types时使用。 基本定义是用这种types表示的元素不包含一个值,用户不应该依赖任何检索的值。
例如:
/** * @return void */ function outputHello() { echo 'Hello world'; }
在上面的例子中没有指定return语句,因此返回值没有确定。
资料来源: http : //www.phpdoc.org/docs/latest/for-users/phpdoc/types.html ( 存档页面 )。
我必须编辑我的答案,因为我最近学到的东西。
使用@return void
而不是@return null
具有非常特殊的含义,请考虑以下两个PHP代码示例。
<?php /** * @return void */ function return_never() { echo "foo"; } /** * @return null|string */ function return_sometimes() { if ($this->condition()) { return "foo"; } }
在第一个例子中,PHP实际上会返回NULL
,因为PHP总是返回NULL
。 但是返回的值对调用者没有用处,因为它没有说什么函数做了什么。 IDE可以使用@return void
的logging信息来指示开发人员使用没有任何用途的返回值。
<?php $foo1 = return_never(); $foo2 = return_sometimes();
第一个调用是没有意义的,因为variables总是包含NULL
,第二个可能实际包含某些东西。 如果我们把函数调用放到一个条件中,这就变得更加有趣了。
<?php if (($foo1 = return_never())) { // Dead code var_dump($foo1); } if (($foo2 = return_sometimes())) { var_dump($foo2); }
正如你所看到的, @return void
有它的用例,如果适用的话,应该使用它。
另外请注意,这将是即将到来的PHP PSR-5标准的一部分。 [1]
这是我如何理解和使用PhpDocumentor注释:
<?php /** * This method always returns string. * @return string */ public function useCase1() { return 'foo'; } /** * This method returns 2 data types so list them both using pipeline separator. * @return string|false */ public function useCase2() { if ($this->foo === 1) { return 'foo'; } return false; } /** * This method performs some operation and does not return anything so no return * annotation is needed. */ public function useCase3() { $this->doOperation(); $this->doAnotherOperation(); } /** * If condition passes method returns void. If condition does not pass it returns * nothing so I think that specifying the return annotation with void is in space. :) * @return void */ public function useCase4() { if ($this->foo === 1) { $this->doOperation(); return; } $this->doAnotherOperation(); }
从php 7.1开始, void
是一个有效的返回types, 可以在一个函数上执行。
我会一直把它添加到docblock。
写它的另一个好处是区分void
方法和可能返回任何内容的方法,但是由于疏忽而没有对docblock的@return
条目。