2012-01-05 13 views
26

Czy funkcja zwróci null?Jeśli funkcja korzysta: return null ;?

E.g.

function test() 
{ 
    return null; // vs return; 
} 

Czy ta ostatnia uważana jest za złą praktykę lub czy to nie ma znaczenia?

PS

Czy jest złą praktyką nie powinna być subiektywna IMHO.

+0

Jeśli masz praktykę wskazując, że 'wartość null' oznacza coś konkretnego, to znaczy zawierać argumenty funkcji złe dane - a następnie przejść do przodu. Ale często powrót boolowski to więcej niż wystarczająca. Używam 'null' w anonimowych funkcjach, które powinny zwracać rzeczywiste dane, więc boolean' false' jest uważane za akceptowalny zwrot, ale 'null' nie jest. – ashein

+1

Możemy wywnioskować, że jest on zbędny, ponieważ środowisko wykonawcze już to robi. Ale to nie czyni go złym ani nieużytecznym. Odpowiedź jest wyraźna. Co ciekawsze, czy nie powinieneś pisać "NULL"? – mario

+0

@mario masz na myśli 'null' vs' NULL'? – PeeHaa

Odpowiedz

18

Jeśli nic nie zwrócisz, po prostu użyj return; lub pomiń go na końcu funkcji.
Jeśli twoja funkcja zazwyczaj zwraca coś, ale nie z jakiegoś powodu, jest to jedna z wielu dróg.

Jest to podobne do sposobu, w jaki to robisz, np. w C: Jeśli twoja funkcja nie zwraca rzeczy, jest to void, w przeciwnym razie często zwraca poprawny wskaźnik lub NULL.

+2

Jak to wpływa na PHP? PHP nie jest C. Żadna wartość zwracana w PHP nie jest taka sama jak "NULL", nie ma typu zmiennej typu void. – hakre

+2

To prawda, ale w ten sposób jest bardziej jasne, że zwracana wartość będzie prawdopodobnie używana przez dzwoniącego. – ThiefMaster

+0

O ile nie ma żadnej dokumentacji, trudno mi powiedzieć. Co czytasz najpierw? Ostatni wiersz ciała funkcji lub typ zwrotu docs właśnie w jego głowie? – hakre

38

Zawsze dobrą praktyką jest pokazywanie tego, co powracasz.

Ale jako wskazówka, następujące są równoważne:

function test() 
{ 
    return null; 
} 


function test() 
{ 
    return; 
} 


function test() 
{ 

} 

We wszystkich przypadkach dla var_dump(test()); będą:

NULL 
+9

+1 dla pierwszego zdania. :) – Herbert

+7

Ostatni przykład funkcji jest bardzo jasny o tym, że nie ma nic do zwrócenia. Który przykład najlepiej pokazuje się w twoim oku? – hakre

+2

Jak w pierwszym komentarzu ... Zawsze jest to dobra praktyka, aby pokazać, co powracasz. Więc mój wybór jest pierwszy. – devdRew

6

Nieokreślona wartość zwracana funkcji w PHP zawsze równa NULL, więc nie robi żadnej różnicy (robi to środowisko wykonawcze).

Co robi różnicę polega na tym, że korzystasz z docblocks i dokumentujesz wartość zwrotu za pomocą tagu @return, tak więc sprytne informacje o ofercie IDE znajdziesz tutaj.

Jeśli chcesz sygnalizować za tym bloku dokumentacyjnym, że nie-powracającego wartość jest przeznaczony, można użyć void:

* @return void 

Jeśli chcesz, aby zasygnalizować, że powrót NULL jest przeznaczony, można użyć null lub NULL (w zależności od stylu kodu PHP dla wielkich standardowych stałych):

* @return null 

lub:

* @return NULL 

To powinno spowodować, że intencja koderów będzie widoczna, ponieważ przez PHP zawsze będzie to null jako faktyczna wartość zwrotu.

przeczytać na:

Więcej szczegółów i zaktualizowane informacje in PeeHaa's answer to this same question.

0

Nie sądzę, by istniała różnica między tymi dwoma elementami.Według PHP documentation on return:

Jeśli parametr nie jest podany, wówczas nawiasy muszą być pominięte i zostaną zwrócone NULL.

Osobiście lubię umieszczać tam NULL. Wtedy nie ma wątpliwości, co jest zwracane, dzięki czemu debugowanie jest łatwiejsze.

+0

Ale nie ma "żadnego pytania", co jest zwracane z samym 'return;' albo ... –

+0

To prawda. Po prostu lubię być gadatliwy. Kiedy patrzę na mój kod za rok, późno w nocy, próbując dowiedzieć się, co jest uszkodzone, lubię mieć wszystko przede mną (nic nie sugeruje). Osobiste preferencje. –

5

To jest po prostu głupie, aby powrócić null jeśli nie ma nic do powrotu. Wykonanie return; wskazuje na to, że nie chce niczego zwrócić. I wyjaśnia, co robi funkcja.

Fakt, że PHP nie ma typu zwrotnego void, nie powinien jednak być powodem, aby cel był mniej wyraźny. Należy również pamiętać, że PHP 7.1 zapewni wsparcie dla the void return type:

function test(): void { 
    return null; // this will error 
} 
Powiązane problemy