2012-01-05 18 views
26

¿Debe una función devolver null?En caso de que una función use: return null ;?

E.g.

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

¿Es esta última una mala práctica o no es importante?

PS

Ya se trate de una mala práctica no debe ser en mi humilde opinión subjetiva.

+0

Si usted tiene una práctica de indicar que 'valor null' significa algo específico, es decir, los argumentos de funciones contienen datos erróneos - y luego seguir adelante. Pero a menudo el retorno booleano es más que suficiente. Utilizo 'null' en los funcs anónimos que se espera que devuelvan datos reales, por lo que boolean' false' se considera una devolución aceptable, pero 'null' no lo es. – ashein

+1

Podemos concluir que es redundante, ya que el tiempo de ejecución ya lo hace. Pero eso no lo hace malo o inútil. La respuesta es explícita. Más interesante, ¿no deberías escribir 'NULL'? – mario

+0

@mario te refieres a 'null' vs' NULL'? – PeeHaa

Respuesta

18

Si no devuelve nada, simplemente use return; u omítelo al final de la función.
Si su función es generalmente devuelve algo pero no por alguna razón, return null; es el camino a seguir.

Eso es similar a cómo lo hace, p. en C: si su función no devuelve nada, es void; de lo contrario, a menudo devuelve un puntero válido o NULL.

+2

¿Cómo hace eso la diferencia en PHP? PHP no es C. Ningún valor de retorno en PHP es idéntico a 'NULL', no hay ningún tipo de variable vacía. – hakre

+2

Es cierto, pero de esta manera es más claro que el valor de retorno probablemente sea utilizado por la persona que llama. – ThiefMaster

+0

A menos que no haya documentación, me resulta difícil de decir. ¿Qué lees primero? ¿La última línea del cuerpo de la función o el tipo de retorno solo aparece en su cabeza? – hakre

38

Siempre es una buena práctica mostrar lo que está devolviendo.

Pero como propina, los siguientes son todas equivalentes:

function test() 
{ 
    return null; 
} 


function test() 
{ 
    return; 
} 


function test() 
{ 

} 

En todos los casos allí por var_dump(test()); será:

NULL 
+9

+1 para la primera oración. :) – Herbert

+7

El último ejemplo de función es muy claro sobre el punto de que no hay nada que devolver. Entonces, ¿qué ejemplo se ve mejor en tu ojo? – hakre

+2

Como en el primer comentario ... Siempre es una buena práctica mostrar lo que estás devolviendo. Entonces mi elección es la primera. – devdRew

6

Un valor de retorno de la función definida en PHP siempre es igual a NULL, por lo no hace ninguna diferencia (el tiempo de ejecución hace esto).

Lo que hace la diferencia es que usted hace uso de docblocks y documenta el valor de retorno con la etiqueta @return tan inteligente información de oferta IDE aquí.

Si desea señal por el bloque de documentación que no es, devolver un valor que se pretende, se puede utilizar void:

* @return void 

Si desea señalar que la devolución de NULL está destinado, puede utilizar null o NULL (dependiendo de su estilo de código para las constantes estándar de PHP en mayúsculas):

* @return null 

o:

* @return NULL 

Esto debería hacer que la intención del programador sea visible, ya que PHP es siempre null como el valor de retorno real.

Leer en:

Más detalles e información actualizada es in PeeHaa's answer to this same question.

0

Semánticamente, no creo que haya una diferencia entre los dos.De acuerdo con la PHP documentation on return:

Si no se proporciona ningún parámetro, los paréntesis se deben omitir y serán devueltos NULL.

Personalmente, me gusta poner el NULL allí. Entonces no hay dudas sobre lo que se devuelve, haciendo que la depuración sea un poco más fácil.

+0

Pero no hay "duda" de lo que se devuelve con solo 'return;' cualquiera ... –

+0

Eso es verdad. Simplemente me gusta ser prolijo, supongo. Cuando miro mi código dentro de 1 año, tarde en la noche, tratando de descubrir qué está roto, me gusta tener todo en frente de mí (nada está implícito). Preferencia personal. –

0

La página de mejores prácticas de PEAR hace un return null en su ejemplo de "Regreso anticipado". Esto aumenta la legibilidad que siempre debemos tratar de hacer ya que escribimos código para humanos, no para computadoras.

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

5

Es simplemente tonto para volver null si no hay nada para volver. Hacer return; muestra la intención de no devolver nada. Y deja en claro lo que hace la función.

El hecho de que PHP no tenga un tipo de devolución void todavía no debería ser una razón para hacer que la intención sea menos clara. También tenga en cuenta que PHP 7.1 proporcionará apoyo para the void return type:

function test(): void { 
    return null; // this will error 
} 
Cuestiones relacionadas