PHPDoc: @return void необходимо?
Действительно ли нужно сделать что-то вроде этого:
/**
* ...
*
* @return void
*/
У меня есть несколько методов, которые не имеют возвращаемого значения, и кажется действительно излишним добавить что-то подобное в комментарий. Будет ли считаться плохой формой, чтобы оставить это?
Ответы
Ответ 1
Если это ясно для документации, то оставьте ее, но это не является абсолютно необходимым. Это полностью субъективное решение.
Лично я оставил бы это.
ИЗМЕНИТЬ
Я стою исправлено. После небольшой поисковой системы, страница wikipedia говорит:
@return [описание типа] Этот тег не должен использоваться для конструкторов или методов, определенных с типом возвращаемого типа.
На веб-сайте phpdoc.org говорится:
описание и описание описания @return datatype1 | описание datatype2
Тег @return используется для документирования возвращаемого значения функций или методов. @returns является псевдонимом для @return для поддержки форматов тегов других автоматических документов
Тип данных должен быть допустимым PHP-типом (int, string, bool и т.д.), именем класса для возвращаемого типа объекта или просто "смешанным". Если вы хотите явно показать несколько возможных типов возвращаемых данных, перечислите их без ограничений (например, @return int | string). Если имя класса используется как тип данных в теге @return, phpDocumentor автоматически создаст ссылку на эту документацию класса. Кроме того, если функция возвращает несколько возможных значений, отделите их, используя | character и phpDocumentor будут анализировать любые имена классов в возвращаемом значении. phpDocumentor отобразит необязательное описание без изменений.
Sooo... Основываясь на этом, я бы сказал, оставьте пустоту. Это нестандартное, по крайней мере.
Ответ 2
В соответствии с phpDocumentor допустимо действие @return void:
http://www.phpdoc.org/docs/latest/guides/types.html#keywords
... этот тип обычно используется только при определении типа возврата метод или функцию. Основное определение состоит в том, что элемент указанный этим типом не содержит значения, и пользователь должен не полагайтесь на какое-либо полученное значение.
Например:
/**
* @return void
*/
function outputHello()
{
echo 'Hello world';
}
В приведенном выше примере не указан оператор возврата, и, таким образом, возвращаемое значение не определено.
Источник: http://www.phpdoc.org/docs/latest/for-users/phpdoc/types.html (заархивированная страница).
Ответ 3
Мне нужно отредактировать свой ответ из-за того, что я недавно узнал.
Использование @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/
Ответ 4
Вот как я понимаю и использую аннотации 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();
}
Ответ 5
Как и в случае с php 7.1, void
является допустимым типом возвращаемого значения и может применяться к функции.
Я бы всегда добавлял его в docblock.
Другим преимуществом написания является различие методов void
от методов, которые могут возвращать что-либо, но не имеют записи @return
на docblock по небрежности.