2009-07-11 6 views
7

acabo de ver esta¿Un simple `return` en una función PHP simplemente finaliza la función prematuramente?

// 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; 
} 

No he visto un simple return antes, y nunca lo he utilizado. Mi única conjetura es que simplemente actúa igual que cualquier return 'something' (deteniendo la función), excepto que en realidad no devuelve un resultado.

Además, ¿qué pasaría en esta situación?

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

$var = text(''); 

sé que es un mal ejemplo (que probablemente debería volver falsa o lanzar una excepción), pero habría que ser un error, o podría ser simplemente el $var nulo o en blanco?

+0

Creo que se refería a XHR, no HXR :) –

+0

@Gab - ese fue solo un ejemplo que encontré en la red. – alex

Respuesta

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"; 

devuelve:

NULL falsa falsa cierto

2

Respuesta corta. Simplemente termina la función, es muy similar a una función sin declaración de devolución. No se devuelve nada, la función acaba de salir.

En su segundo ejemplo, $ var would = nothing.

¿Por qué no ejecutarlo y ver?

+0

Quería obtener alguna respuesta de la comunidad y con suerte algunos consejos. Gracias por tu respuesta. – alex

7

PHP se escribe dinámicamente, de manera de volver ningún valor es equivalente a devolver un valor nulo en cualquier tipo.

4

Un retorno sin valor devuelve nulo.

Más información del manual:

Si se llama desde una función, la sentencia return() termina inmediatamente la ejecución de la función actual, y devuelve su argumento como el valor de la llamada a la función. return() también finalizará la ejecución de una declaración eval() o archivo de script.

Si se llama desde el alcance global, la ejecución del archivo de script actual finaliza. Si el archivo de script actual fue include() ed o require() ed, el control pasará de nuevo al archivo de llamada. Además, si el archivo de script actual incluye() ed, el valor otorgado a return() se devolverá como el valor de la llamada include(). Si se llama a return() desde el archivo de script principal, la ejecución del script finaliza. Si el archivo de script actual fue nombrado por las opciones de configuración auto_prepend_file o auto_append_file en php.ini, entonces la ejecución del archivo de script finaliza.

2

Sí, "return;" o return(); en una función, deja de ejecutar esa función (o archivo si la declaración de devolución no está en una función) en ese punto (si se ejecuta el código) y devuelve técnicamente un valor nulo.

Su primer ejemplo generará el encabezado 'HTTP/1.1 403 Prohibido' y luego finalizará esa función si request :: is_ajax() es verdadero.

En el ejemplo de código:

function text($var) 
{ 

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

} 
$var = text(''); 

Usted puede tener los siguientes cabo viene:

  • Si $ var no es TRUE (es decir, falsa, null, texto o un número entero), entonces la salida función y retorno nulo.
  • Si $ var es EXACTAMENTE VERDADERO (la instrucción if verifica si $ var no es cierto), luego ejecute do_something();

Te sospecharía probable que desee cambiar la sentencia if para cualquiera:

if (!is_string($var)) { 

si lo que desea es hacer_algo() para una cadena o

if (is_null($var)) { 

si solo deseas para hacer_algo() a $ var si se ha establecido. También es posible que desee cambiar la declaración de su función a: texto de función ($ var == NULO) { por lo que si llama al texto sin un parámetro, $ var se establece automáticamente como nulo.

Cuestiones relacionadas