2009-07-11 23 views
7

Ho appena visto questaUn semplice `return` in una funzione PHP termina prematuramente la funzione?

// Check to see if the request is a XHR call  
if (request::is_ajax()) 
{ 
    // Send the 403 header 
    header('HTTP/1.1 403 Forbidden'); 
    return; 
} 

non ho visto una semplice return prima, e non ho mai usato. La mia unica ipotesi è che agisce semplicemente come qualsiasi return 'something' (interrompendo la funzione), tranne che in realtà non restituisce un risultato.

Inoltre, cosa accadrebbe in questa situazione?

function text($var) 
{ 
    if (! $var) { 
     return; 
    } 
    do_something(); 
} 

$var = text(''); 

so che è un cattivo esempio (probabilmente dovrebbe restituire false o un'eccezione), ma sarebbe un errore, o sarebbe il $var semplicemente essere nullo o vuoto?

+0

Penso che intendessi XHR, non HXR :) –

+0

@ GAB - questo era solo un esempio che ho trovato in rete. – alex

risposta

10
function text($var) 

{ 

    if (! $var) { 
     return; 
    } 
    do_something(); 

} 

$var = text(''); 

echo gettype($var); 
echo is_bool($var) ? "true" : "false"; 
echo is_string($var) ? "true" : "false"; 
echo is_null($var) ? "true" : "false"; 

rendimenti:

NULL falso falso vero

2

Risposta breve. Termina semplicemente la funzione, è molto simile a una funzione senza dichiarazione di ritorno. Non viene restituito nulla, la funzione è appena uscita.

Nel secondo esempio, $ var = niente.

Perché non eseguirlo e vedere?

+0

Volevo ottenere una risposta dalla comunità e, si spera, qualche consiglio. Grazie per la tua risposta. – alex

7

PHP viene digitato in modo dinamico, in modo da restituire nessun valore è equivalente a restituire un valore nullo in qualsiasi tipo.

4

Un ritorno senza valore restituisce null.

Maggiori informazioni dal manuale:

Se viene chiamato all'interno di una funzione, l'istruzione return() termina immediatamente l'esecuzione della funzione corrente e restituisce il suo argomento come il valore della chiamata di funzione. return() terminerà anche l'esecuzione di un'istruzione eval() o di un file di script.

Se chiamato dall'ambito globale, l'esecuzione del file di script corrente è terminata. Se il file di script corrente è stato include() ed o require() ed, il controllo viene passato nuovamente al file chiamante. Inoltre, se il file di script corrente era include() ed, allora il valore dato a return() verrà restituito come valore della chiamata include(). Se return() viene chiamato all'interno del file di script principale, l'esecuzione dello script termina. Se il file di script corrente è stato nominato dalle opzioni di configurazione auto_prepend_file o auto_append_file in php.ini, l'esecuzione del file di script è terminata.

2

Sì, "return;" o ritorno(); in una funzione interrompe l'esecuzione di tale funzione (o file se l'istruzione return non è in una funzione) in quel punto (se il codice viene eseguito) e tecnicamente restituisce un valore nullo.

Il primo esempio restituisce l'intestazione 'HTTP/1.1 403 Proibita' e quindi termina la funzione se richiesta :: is_ajax() è uguale a true.

Nel tuo esempio di codice:

function text($var) 
{ 

    if (! $var) { 
     return; 
    } 
    do_something(); 

} 
$var = text(''); 

si può avere il seguente viene fuori:

  • Se $ var non è vero (cioè falsa, null, testo o un intero), poi uscita funzione e restituisce null.
  • Se $ var è ESATAMENTE VERO (l'istruzione if sta controllando se $ var è tutto tranne che true), quindi eseguire do_something();

Ho il sospetto che probabilmente vogliono cambiare l'istruzione if a uno:

if (!is_string($var)) { 

se si desidera solo per fai_qualcosa() per una stringa o

if (is_null($var)) { 

se desideri solo per fare_qualcosa() a $ var se è stato impostato. Si potrebbe anche voler cambiare la dichiarazione della propria funzione in: testo della funzione ($ var == NULL) { quindi se si chiama testo senza un parametro, $ var viene automaticamente impostato su null.

Problemi correlati