2010-08-19 12 views
13

Cuando la devolución de valores en php, ¿Se considera buena o mala práctica para devolver tipos de datos mixtos. Estoy trabajando en un proyecto en el que constantemente me enfrento con métodos que devuelven un número de identificación o null. Estoy manejando el valor null marcando null y devolviendo -1 si es null.php devolver tipos de datos mixtos - buenas o malas

Otra situación en la que me encuentro mucho es donde un método debería hacer algo y devolver una cadena. Pero a veces no es posible devolver la cadena ya que no se encontró o se produjo una excepción. ¿Qué es lo mejor que puedes hacer aquí? ¿Devolver una cadena como 'falló' o algo así? Esto crea un acoplamiento de cadena entre métodos, creo, ya que el método de llamada tiene que saber exactamente el mensaje de falla de cadena para verificar?

EDIT: OK, hay algunas opiniones diferentes ya. Me gusta la idea de devolver falso en caso de falla y el resultado real sea cual sea su tipo de datos en cuanto al éxito. Pero ... ¿hay una mejor práctica de facto cuando se trata de esto? Quiero decir, ¿qué hacen los programadores en otros idiomas, es decir, Java y C++, etc. en estas situaciones?

Respuesta

8

Lo que suelo hacer es si el método funcionó, devuelva el valor y, si no funciona, devuelve FALSE. Eso es lo que hacen muchos de los métodos integrados de PHP. Por lo tanto, puede verificar si la función devolvió FALSE o no.

+1

Sí, eso tiene sentido, pero supongo que aquí es donde estoy pensando que se están devolviendo diferentes tipos de datos. Esto no está realmente permitido en muchos idiomas, ¿es esta una buena o una mala práctica? – david

+0

Volver a mezclar tipos no es malo. –

+0

PHP no es un lenguaje fuertemente tipado y las funciones no tienen un tipo de devolución explícita como otros idiomas. –

4

creo que es una mala práctica para devolver tipos de datos mixtos. Es posible, como usted señaló, pero piense en la legibilidad y mantenimiento de su código. Asegúrese de comentar lo que está devolviendo y por qué, creo que eso será lo más importante. Si esperas una int atrás y devuelves -1 en lugar de nulo, coméntalo, para que tú (u otra persona) no se vuelva loca tratando de descubrir lo que intentabas hacer.

+1

en lugar de devolver -1 mejor enfoque sería devolver falso. y sí, use la documentación. por ejemplo, phpdoc para mencionar qué función devuelve –

4

nulo es un valor de retorno bastante común para indicar que no hay ningún valor de retorno. Debería devolver nulo (no "fallido", o -1) si la función no quiere devolver ningún ID.

Si es excepcional que no se encontró una ID, debe lanzar una excepción.

+2

+1 para mencionar Excepciones. Ojalá el núcleo los usara más ... – ircmaxell

0

Una función que devuelve valores mixtos no se considera mala. De hecho, esa es la belleza de php, ya que es un lenguaje dinámico. Por lo tanto, devuelve falso cuando falla y el valor requerido si la función se ejecuta correctamente ,

if(false == ($data = do_something())) return false; 
else print_r($data); 
+4

Deberías usar '===', no '=='. '0 == falso' es verdadero. –

+1

0 == false es verdadero, por lo que null == false y '' == false y demás. usando === o == por lo general depende de la situación ,. –

2

Acepto las respuestas anteriores.

Sin embargo, si diseña un sistema completo, la "mejor práctica" sería usar excepciones: siempre devuelva algo significativo, y en caso de anomalía, ejecute una excepción. La persona que llama puede lidiar con las situaciones que sabe cómo enfrentar y dejar que alguien más capte el resto.

+1

Sí, pero las excepciones solo se deben usar para situaciones excepcionales. Id no existe, etc. ¿realmente debería manejarse con un valor de retorno adecuado? ¿No entiendes la posibilidad de abusar de las excepciones y simplemente usarlas para todo? – david

+2

Bueno, como arquitecto de software, usted decide cuándo usarlo. Creo que la excepción es una gran manera de proteger la ejecución de una parte del código. El problema con devolver "falso" es que no sabes la razón por la que se devuelve. Por lo tanto, debe identificar claramente solo UN caso en el que se puede devolver el falso (por ejemplo, "fin del ciclo"), de lo contrario corre el riesgo de confundir diferentes errores. Así que en su API se escribe: rendimientos: cadena en el caso habitual, falsa en final de bucle, una excepción que en otros casos. – greg

+1

Solo quería hacer +1 de lo que decía @Greg. Devolver falso (o "falso") es un antipatrón si está haciendo una programación basada en excepciones. –

3

Volviendo tipo mixto es malo, al menos hoy en día en 2013. Boom! El camino a seguir es la de dividir esto:

BAD, el estilo de tipo de retorno mixta:

function checkResult($data) 
{ 
    if ($data) { 
     ... 
     return $stuff; 
    } else { 
     return false; 
    } 
} 

personas necesitarán una lógica adicional para trabajar checkRsult(), y que nunca se sabe exactamente qué tipo devolverá.

buenos, estilo tipo de retorno fija claramente:

Tal vez el ejemplo no es muy buena, pero muestra el camino a seguir.

function doesResultExist($data) 
{ 
    if ($data) { 
     return true; 
    } 
    // default return 
    return false; 
} 

function getResultData() 
{ 
    ... 
    return $stuff; 
} 
Cuestiones relacionadas