2012-01-05 27 views
26

Se una funzione restituisce null?Se una funzione utilizza: return null ;?

E.g.

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

Quest'ultimo è considerato una cattiva pratica o non importa?

PS

Che si tratti di una cattiva pratica non dovrebbe essere IMHO soggettiva.

+0

Se si dispone di una pratica di indicare che 'valore null' significa qualcosa di specifico, vale a dire gli argomenti delle funzioni contengono dati non validi - poi andare avanti. Ma spesso il ritorno al booleano è più che sufficiente. Io uso 'null' nelle funzioni anonime che ci si aspetta che restituiscano dati reali, quindi booleano' false' è considerato un ritorno accettabile, ma 'null' non lo è. – ashein

+1

Possiamo concludere che è ridondante, poiché il runtime lo fa già. Ma questo non lo rende cattivo o inutile. La risposta è esplicita. Più interessante, non dovresti scrivere 'NULL'? – mario

+0

@mario intendi 'null' vs' NULL'? – PeeHaa

risposta

18

Se non si restituisce nulla, utilizzare solo return; o ometterlo affatto alla fine della funzione.
Se la funzione in genere restituisce qualcosa ma non lo fa per qualche motivo, return null; è la strada da percorrere.

Questo è simile a come lo si fa ad es. in C: Se la tua funzione non restituisce le cose, è void, altrimenti restituisce spesso un puntatore valido o NULL.

+2

Come fa a fare la differenza in PHP? PHP non è C. Nessun valore di ritorno in PHP è identico a 'NULL', non esiste alcun tipo di variabile void. – hakre

+2

Vero, ma in questo modo è più chiaro che il valore restituito verrà probabilmente utilizzato dal chiamante. – ThiefMaster

+0

A meno che non ci sia documentazione, trovo difficile dirlo. Cosa leggi prima? L'ultima riga del corpo della funzione o il tipo di ritorno documenta solo nella sua testa? – hakre

38

È sempre una buona pratica mostrare ciò che si sta restituendo.

Ma come un suggerimento, i seguenti sono tutti equivalenti:

function test() 
{ 
    return null; 
} 


function test() 
{ 
    return; 
} 


function test() 
{ 

} 

In tutti i casi lì per var_dump(test()); saranno:

NULL 
+9

+1 per la prima frase. :) – Herbert

+7

L'ultimo esempio di funzione è molto chiaro sul punto che non c'è nulla da restituire. Quindi quale esempio mostra meglio nei tuoi occhi? – hakre

+2

Come nel primo commento ... È sempre una buona pratica mostrare ciò che stai restituendo. Quindi la mia scelta è la prima. – devdRew

6

Un valore di ritorno della funzione non definita in PHP uguale sempre NULL, così non fa alcuna differenza (il runtime fa questo).

Ciò che fa la differenza è che si fa uso di docblocks e si documenta il valore restituito con il tag @return così intelligente le informazioni sull'offerta dell'IDE qui.

Se si desidera segnalare per il docblock non-restituendo un valore è destinato, è possibile utilizzare void:

* @return void 

Se si vuole segnalare che il ritorno NULL è destinato, è possibile utilizzare null o NULL (a seconda del codice di stile per maiuscole costanti standard di PHP):

* @return null 

o:

* @return NULL 

Ciò dovrebbe rendere visibile l'intestazione dei codificatori come da PHP, sarebbe sempre null come valore di ritorno fattuale.

Continua a leggere:

Maggiori dettagli e informazioni aggiornate è in PeeHaa's answer to this same question.

0

Semanticamente, non penso che ci sia una differenza tra i due.Secondo il PHP documentation on return:

Se nessun parametro viene indicato, le parentesi devono essere omesse e NULL saranno restituiti.

Personalmente mi piace mettere il NULL lì. Quindi non c'è dubbio su cosa viene restituito, rendendo il tuo debug un po 'più facile.

+0

Ma non c'è "nessuna domanda" cosa viene restituito con solo 'return;' o ... –

+0

È vero. Mi piace essere prolisso, credo. Quando guardo il mio codice da un anno a questa parte, a notte fonda, cercando di capire cosa è rotto, mi piace avere tutto davanti a me (niente è implicito). Preferenza personale. –

0

La pagina delle migliori pratiche PEAR fa un esempio di "Ritorno anticipato" a return null. Questo aumenta la leggibilità che dovremmo sempre provare a fare da quando scriviamo il codice per gli umani, non per i computer.

fonte: http://pear.php.net/manual/en/standards.bestpractices.php

5

E 'semplicemente stupido per tornare null se non c'è niente di tornare. Fare return; indica l'intenzione di non restituire effettivamente nulla. E chiarisce cosa fa la funzione.

Il fatto che PHP non abbia ancora un tipo di reso void non dovrebbe essere un motivo per rendere meno chiaro l'intento. Si noti inoltre che il PHP 7.1 fornirà il supporto per the void return type:

function test(): void { 
    return null; // this will error 
} 
Problemi correlati