PHPDoc: @ return void konieczne?

Czy naprawdę trzeba zrobić coś takiego:

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

Mam kilka metod, które nie mają wartości zwrotnej, i wydaje się, że naprawdę zbędne, aby umieścić coś takiego w komentarzu. Czy byłoby to uważane za złą formę, aby go pominąć?

Author: Richie Marquez, 2010-01-14

5 answers

Jeśli to jasno wyjaśnia dokumentację, zostaw ją, ale nie jest to bezwzględnie konieczne. To całkowicie subiektywna decyzja.

Osobiście bym to pominął.

EDIT
Przyznaję się do błędu. Po odrobinie googlowania strona Wikipedii mówi:

@return [Opis typu] ten znacznik nie powinien być używany dla konstruktorów lub metod zdefiniowanych z typem zwracanym void.

The phpdoc.org strona www says:

@ return datatype description
@return datatype1 / datatype2 description

Znacznik @ return jest używany do dokumentowania zwracanej wartości funkcji lub metod. @returns jest aliasem dla @ return do obsługi formatów tagów innych automatycznych dokumentów

Typ danych powinien być prawidłowym typem PHP (int, string, bool, itd.), nazwą klasy dla typu zwracanego obiektu lub po prostu "mixed". Jeśli chcesz jawnie pokazać wiele możliwych zwrotów typy, wypisują je bez spacji (np. "@ return int / string"). Jeśli nazwa klasy jest używana jako typ danych w tagu @return, phpDocumentor automatycznie utworzy link do dokumentacji tej klasy. Ponadto, jeśli funkcja zwraca wiele możliwych wartości, oddziel je za pomocą znaku|, a phpDocumentor przetworzy wszystkie nazwy klas w zwracanej wartości. phpDocumentor wyświetli opcjonalny opis niezmodyfikowany.

Sooo... Opierając się na tym, powiedziałbym zostaw pustkę. To co najmniej niestandardowe.

 80
Author: Jonathan Fingland,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-07-21 12:51:17

Zgodnie z phpDocumentor, @ return void jest poprawny:

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

... ten typ jest powszechnie używany tylko przy definiowaniu typu zwrotu metoda lub funkcja. Podstawową definicją jest to, że element wskazane tym typem nie zawiera wartości i użytkownik powinien nie polegaj na żadnej odzyskanej wartości.

Na przykład:

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

W powyższym przykładzie żadna Instrukcja return nie jest określone i tak jest wartość zwracana nie została ustalona.

Źródło: http://www.phpdoc.org/docs/latest/for-users/phpdoc/types.html ( zarchiwizowana Strona ).

 42
Author: tivnet,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-07-29 12:38:20

Muszę edytować swoją odpowiedź z powodu czegoś, czego się ostatnio nauczyłem.

Użycie @return void zamiast @return null ma bardzo szczególne znaczenie, rozważ następujące dwa przykłady kodu PHP.

<?php

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

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

W pierwszym przykładzie PHP zwróci NULL, ponieważ PHP zawsze zwraca NULL. Zwracana wartość jest jednak bezużyteczna dla wywołującego, ponieważ nie mówi nic o tym, co zrobiła funkcja. Ide mogą wykorzystać udokumentowane informacje @return void, aby wskazać deweloperowi, że zwracane wartości są używane, co nie służy żadnemu celowi.

<?php

$foo1 = return_never();

$foo2 = return_sometimes();

Pierwsze wywołanie jest bezsensowne, ponieważ zmienna zawsze będzie zawierać NULL, drugie może rzeczywiście coś zawierać. Staje się to jeszcze bardziej interesujące, jeśli umieścimy wywołania funkcji w trybie warunkowym.

<?php

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

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

Jak widać, @return void ma swoje przypadki użycia i powinien być stosowany, jeśli ma zastosowanie.

Zauważ również, że będzie on częścią nadchodzącego standardu PHP PSR-5.[1]

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

 13
Author: Fleshgrinder,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-04-10 18:14:50

Od php 7.1, void jest poprawnym typem zwracanym i może być wymuszone na funkcji.

Ja bym zawsze dodała to na docbloku.

Kolejną korzyścią z jej napisania jest odróżnienie metod void od metod, które mogą zwracać cokolwiek, ale nie mają wpisu @return na docbloku przez zaniedbanie.

 4
Author: Dimitris Baltas,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-08 09:24:58

Oto jak Rozumiem i używam adnotacji 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();
}
 2
Author: Dejv,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-02-13 15:43:17