PHPDoc:@return void 必要吗?

发布于 2024-08-18 04:15:40 字数 140 浏览 6 评论 0原文

是否真的有必要做这样的事情:

/**
 * ...
 * 
 * @return void
 */

我有很多没有返回值的方法,并且在注释中添加这样的内容似乎真的很多余。忽略它会被认为是不好的形式吗?

Is it really necessary do something like this:

/**
 * ...
 * 
 * @return void
 */

I have quite a few methods that don't have a return value, and it seems really redundant to put something like this in the comment. Would it be considered bad form to leave it out?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

偏爱你一生 2024-08-25 04:15:40

如果文档中的内容很清楚,则将其保留,但这并不是绝对必要的。这完全是一个主观决定。

就我个人而言,我会忽略它。

编辑
我纠正了。经过一番谷歌搜索后,维基百科页面显示:

@return [类型描述] 此标记不应该用于使用 void 返回类型定义的构造函数或方法。

phpdoc.org 网站说:

@return 数据类型描述
@return datatype1|datatype2 说明

@return 标签用于记录函数或方法的返回值。 @returns 是 @return 的别名,用于支持其他自动文档生成器的标签格式

数据类型应该是有效的 PHP 类型(int、string、bool 等)、返回对象类型的类名,或者只是“混合”。如果您想显式显示多种可能的返回类型,请以竖线分隔(不带空格)列出它们(例如“@return int|string”)。如果类名用作@return 标记中的数据类型,phpDocumentor 将自动创建指向该类文档的链接。此外,如果函数返回多个可能的值,请使用 | 分隔它们。字符,phpDocumentor 将解析出返回值中的任何类名。 phpDocumentor 将显示未修改的可选描述。

Sooo...基于此,我会说忽略空白。至少它是非标准的。

If it makes it clear for the documentation, then leave it in, but it isn't strictly necessary. It's an entirely subjective decision.

Personally, I would leave it out.

EDIT
I stand corrected. After a little googling, the wikipedia page says:

@return [type description] This tag should not be used for constructors or methods defined with a void return type.

The phpdoc.org website says:

@return datatype description
@return datatype1|datatype2 description

The @return tag is used to document the return value of functions or methods. @returns is an alias for @return to support tag formats of other automatic documentors

The datatype should be a valid PHP type (int, string, bool, etc), a class name for the type of object returned, or simply "mixed". If you want to explicitly show multiple possible return types, list them pipe-delimited without spaces (e.g. "@return int|string"). If a class name is used as the datatype in the @return tag, phpDocumentor will automatically create a link to that class's documentation. In addition, if a function returns multiple possible values, separate them using the | character, and phpDocumentor will parse out any class names in the return value. phpDocumentor will display the optional description unmodified.

Sooo... Based on that, I would say leave out the void. It's non-standard, at least.

风追烟花雨 2024-08-25 04:15:40

根据 phpDocumentor,@return void 是有效的:

http://www.phpdoc .org/docs/latest/guides/types.html#keywords

...
该类型通常仅在定义返回类型时使用
方法或函数。基本定义是元素
此类型指示不包含值,用户应该
不依赖任何检索到的值。

例如:

<前><代码> /**
* @返回无效
*/
函数输出Hello()
{
回显“你好世界”;
}

在上面的例子中没有指定 return 语句,因此是
返回值未确定。

资料来源: http://www.phpdoc.org/docs/latest /for-users/phpdoc/types.html (存档页面)。

According to phpDocumentor, @return void is valid:

http://www.phpdoc.org/docs/latest/guides/types.html#keywords

...
this type is commonly only used when defining the return type of
a method or function. The basic definition is that the element
indicated with this type does not contain a value and the user should
not rely on any retrieved value.

For example:

 /**
  * @return void
  */
 function outputHello()
 {
     echo 'Hello world';
 }

In the example above no return statement is specified and thus is the
return value not determined.

Source: http://www.phpdoc.org/docs/latest/for-users/phpdoc/types.html (archived page).

新雨望断虹 2024-08-25 04:15:40

由于我最近学到的一些东西,我必须编辑我的答案。

使用 @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 的记录信息来指示开发人员使用了无用的返回值。

<?php

$foo1 = return_never();

$foo2 = return_sometimes();

第一个调用是毫无意义的,因为变量将始终包含 NULL,第二个调用实际上可能包含某些内容。如果我们将函数调用放入条件中,这会变得更加有趣。

<?php

if (($foo1 = return_never())) {
    // Dead code
    var_dump($foo1);
}

if (($foo2 = return_sometimes())) {
    var_dump($foo2);
}

正如您所看到的,@return void 有它的用例,如果适用的话应该使用。

另请注意,它将成为即将推出的 PHP PSR-5 标准的一部分。[1]

[1] http://www.php-fig.org/psr/

I have to edit my answer because of something I have learned recently.

Using @return void instead of @return null has a very special meaning, consider the following two examples of PHP code.

<?php

/**
 * @return void
 */
function return_never() {
    echo "foo";
}

/**
 * @return null|string
 */
function return_sometimes() {
    if ($this->condition()) {
        return "foo";
    }
}

In the first example PHP will actually return NULL, since PHP always returns NULL. But the returned value is of no use to the caller since it does not say anything about what the function did. IDEs can use the documented information of @return void to indicate the developer that a return values is used which serves no purpose.

<?php

$foo1 = return_never();

$foo2 = return_sometimes();

The first call is senseless since the variable will always contain NULL, the second one might actually contain something. This is becoming even more interesting if we put the function calls into a conditional.

<?php

if (($foo1 = return_never())) {
    // Dead code
    var_dump($foo1);
}

if (($foo2 = return_sometimes())) {
    var_dump($foo2);
}

As you can see, @return void has its use cases and should be used if applicable.

Also note that it is going to be a part of the upcoming PHP PSR-5 standard.[1]

[1] http://www.php-fig.org/psr/

怼怹恏 2024-08-25 04:15:40

从 php 7.1 开始, void 是有效的返回类型,并且可以在函数上强制执行。

总是将其添加到文档块中。

编写它的另一个好处是,将 void 方法与可能返回任何内容但由于疏忽而在文档块上没有 @return 条目的方法区分开来。

As of php 7.1, void is a valid return type and can be enforced on a function.

I would always add it on the docblock.

Another benefit of writing it, is to differentiate the void methods from the methods that may return anything but don't have a @return entry on the docblock by negligence.

染火枫林 2024-08-25 04:15:40

以下是我对 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();
}

Here is how I understand and use PhpDocumentor annotations:

<?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();
}
傲娇萝莉攻 2024-08-25 04:15:40

就我个人而言,我认为这里缺少的一件大事是记录函数返回结果非常重要。目前标准没有任何关于从不返回的函数的文档......因此 return void 是表示该函数确实返回的方式。

考虑这个代码块

<?php

/**
 * @return void
 */
function return_void() {
    echo "foo";
}

/**
 * @return null|string
 */
function return_sometimes() {
    if ($this->condition()) {
        return "foo";
    }
}

/**
* This function actually doesnt return at all - it kills the script
**/
function noreturn() {
     //do somthing then
     die(); //or exit()
}

显然,使用 @return 至少表明该函数确实返回

Personally, I think the big thing missing from this is that documenting a function returns at all is important. Currently standards dont have any documentation for functions that never return....hence a return void is way of saying yes this function does actually return.

Consider this code block

<?php

/**
 * @return void
 */
function return_void() {
    echo "foo";
}

/**
 * @return null|string
 */
function return_sometimes() {
    if ($this->condition()) {
        return "foo";
    }
}

/**
* This function actually doesnt return at all - it kills the script
**/
function noreturn() {
     //do somthing then
     die(); //or exit()
}

Clearly the use of @return at least indicates the function does return

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文