Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Comprobar devolucion de funcion

Estas en el tema de Comprobar devolucion de funcion en el foro de PHP en Foros del Web. Estoy alucinando, no se si ha cambiado esto en alguna versión de PHP o es que tenía mal entendido como funciona esto. El caso es ...
  #1 (permalink)  
Antiguo 11/04/2013, 09:23
Avatar de bNd170  
Fecha de Ingreso: agosto-2009
Ubicación: $this->setLocation('Valencia', 'Spain');
Mensajes: 365
Antigüedad: 14 años, 8 meses
Puntos: 13
Comprobar devolucion de funcion

Estoy alucinando, no se si ha cambiado esto en alguna versión de PHP o es que tenía mal entendido como funciona esto.

El caso es que tengo una función en php que puede devolverme tres estados, true, false, o un código de error.

La cuestión es que al filtrar el resultado, si me devuelve un código de error, el php lo entiende por un true y no entiendo el porque.

Código PHP:
function funcion_academica($valor) {
 if(
$valor==1)
   return 
true;
 elseif(
$valor==0)
   return 
false;
 else
   return 
CODIGO_ERRROR// Es una constante
}

echo 
funcion_academica('3'); // Devuelve el texto del error

if(funcion_academica('3') == CODIGO_ERROR// Se traga esto como un TRUE :S es decir, lo muestra si envio 3, como si envio 1!
 
echo 'ERROR'
  #2 (permalink)  
Antiguo 11/04/2013, 09:33
pr0
 
Fecha de Ingreso: marzo-2004
Mensajes: 687
Antigüedad: 20 años, 1 mes
Puntos: 28
Respuesta: Comprobar devolucion de funcion

Hmm... no he probado tu código pero así de primeras veo que le pasas un string ('3') y sin embargo en la funcion comparas $valor contra números enteros...
  #3 (permalink)  
Antiguo 11/04/2013, 09:34
Avatar de ggomez91  
Fecha de Ingreso: octubre-2008
Mensajes: 181
Antigüedad: 15 años, 6 meses
Puntos: 13
Respuesta: Comprobar devolucion de funcion

Hola. ¿Cual es el valor de CODIGO_ERROR? tienes más código?
  #4 (permalink)  
Antiguo 11/04/2013, 09:34
Avatar de ggomez91  
Fecha de Ingreso: octubre-2008
Mensajes: 181
Antigüedad: 15 años, 6 meses
Puntos: 13
Respuesta: Comprobar devolucion de funcion

Cita:
Iniciado por pr0 Ver Mensaje
Hmm... no he probado tu código pero así de primeras veo que le pasas un string ('3') y sin embargo en la funcion comparas $valor contra números enteros...
En PHP el operador == ignora los tipos y '2' == 2 da True, para comparar tipos se usa ===
  #5 (permalink)  
Antiguo 11/04/2013, 09:36
Avatar de bNd170  
Fecha de Ingreso: agosto-2009
Ubicación: $this->setLocation('Valencia', 'Spain');
Mensajes: 365
Antigüedad: 14 años, 8 meses
Puntos: 13
Respuesta: Comprobar devolucion de funcion

La comparativa la hace correctamente, en mi código (Que es bastante más complejo) no comparo un simple dato, no va por ahí el error.

He comprobado lo que me devuelve la funcion en cada caso y lo devuelve bien, el fallo está en que PHP asume que si no es "false" lo que devuelve la funcion, lo toma como "true" aunque devuelva un string.
  #6 (permalink)  
Antiguo 11/04/2013, 09:36
 
Fecha de Ingreso: noviembre-2011
Mensajes: 516
Antigüedad: 12 años, 5 meses
Puntos: 10
Respuesta: Comprobar devolucion de funcion

Hola yo probe este codigo y segun el valor que le pases pasa por los diferentes valores asique el codigo funciona por lo menos este que tengo yo aki ami me a funcionado
Código PHP:
Ver original
  1. <?php function funcion_academica($valor) {
  2.  if($valor==1)
  3.  {
  4.  echo "hola";
  5.    return true;}
  6.  elseif($valor==0){
  7.  echo "adios";
  8.    return false;}
  9.  else{
  10.  echo "errorrrrrrr";
  11.    return CODIGO_ERRROR;} // Es una constante
  12. }
  13.  
  14. echo funcion_academica('3'); // Devuelve el texto del error  
  15. ?>
Nose si es eso lo que te pasaba pero para comprobar que pasaba por las fases le puse codigo echo para que me muestre mensajes un saludo.
  #7 (permalink)  
Antiguo 11/04/2013, 09:37
Avatar de bNd170  
Fecha de Ingreso: agosto-2009
Ubicación: $this->setLocation('Valencia', 'Spain');
Mensajes: 365
Antigüedad: 14 años, 8 meses
Puntos: 13
Respuesta: Comprobar devolucion de funcion

Cita:
Iniciado por ggomez91 Ver Mensaje
En PHP el operador == ignora los tipos y '2' == 2 da True, para comparar tipos se usa ===
El valor de la constante es una string con el que luego ataco un array para sacar el error posible.
  #8 (permalink)  
Antiguo 11/04/2013, 09:39
Avatar de bNd170  
Fecha de Ingreso: agosto-2009
Ubicación: $this->setLocation('Valencia', 'Spain');
Mensajes: 365
Antigüedad: 14 años, 8 meses
Puntos: 13
Respuesta: Comprobar devolucion de funcion

Cita:
Iniciado por edie8 Ver Mensaje
Hola yo probe este codigo y segun el valor que le pases pasa por los diferentes valores asique el codigo funciona por lo menos este que tengo yo aki ami me a funcionado
Código PHP:
Ver original
  1. <?php function funcion_academica($valor) {
  2.  if($valor==1)
  3.  {
  4.  echo "hola";
  5.    return true;}
  6.  elseif($valor==0){
  7.  echo "adios";
  8.    return false;}
  9.  else{
  10.  echo "errorrrrrrr";
  11.    return CODIGO_ERRROR;} // Es una constante
  12. }
  13.  
  14. echo funcion_academica('3'); // Devuelve el texto del error  
  15. ?>
Nose si es eso lo que te pasaba pero para comprobar que pasaba por las fases le puse codigo echo para que me muestre mensajes un saludo.
A ver por favor, no perdáis el tiempo sin leer el tema, os lo ruego.

Si hago un ECHO de lo que me devuelve la funcion sale lo que toca, 1,0, o el valor del CODIGO_ERROR.

Pero al COMPARARLO dentro de PHP, si devuelve CODIGO_ERROR, lo asume como un 1 o true.
  #9 (permalink)  
Antiguo 11/04/2013, 09:42
 
Fecha de Ingreso: noviembre-2011
Mensajes: 516
Antigüedad: 12 años, 5 meses
Puntos: 10
Respuesta: Comprobar devolucion de funcion

y para que hacer otra vez abajo un if(condicion) si la funcion ya te devuelve ese dato es decir en vez de poner tu codigo pon el el ultimo antes del error un echo o lo que quieras hacer.
un saludo.
  #10 (permalink)  
Antiguo 11/04/2013, 09:44
Avatar de bNd170  
Fecha de Ingreso: agosto-2009
Ubicación: $this->setLocation('Valencia', 'Spain');
Mensajes: 365
Antigüedad: 14 años, 8 meses
Puntos: 13
Respuesta: Comprobar devolucion de funcion

Cita:
Iniciado por ggomez91 Ver Mensaje
En PHP el operador == ignora los tipos y '2' == 2 da True, para comparar tipos se usa ===
¡Bravo! Era cuestión de comparar tipos de dato, con un === en lugar de == asume la constante como un string y no como un true :) mil gracias!
  #11 (permalink)  
Antiguo 11/04/2013, 09:46
Avatar de ggomez91  
Fecha de Ingreso: octubre-2008
Mensajes: 181
Antigüedad: 15 años, 6 meses
Puntos: 13
Respuesta: Comprobar devolucion de funcion

Podrías poner un ejemplo para que repliquemos el error? no entiendo si la comparación con la constante da True o la constante misma lo hace. Si es lo segundo es por que para PHP todo lo que no sea false o 0 se interpreta como true, por ejemplo:

Código:
if('algo')
    echo "true"
^Eso imprime "true"
  #12 (permalink)  
Antiguo 11/04/2013, 09:58
Avatar de bNd170  
Fecha de Ingreso: agosto-2009
Ubicación: $this->setLocation('Valencia', 'Spain');
Mensajes: 365
Antigüedad: 14 años, 8 meses
Puntos: 13
Respuesta: Comprobar devolucion de funcion

Si claro.

Veamos, si tenemos una funcion:
Código PHP:
Ver original
  1. function funcion_academica($valor) {
  2.  if($valor==1) // SI valor vale 1, devolvemos TRUE, es decir, le decimos a PHP que hemos logrado lo que queríamos.
  3.    return true;
  4.  elseif($valor==0)
  5.    return false; // SI valor vale 0, devolvemos FALSE al contrario que si valiese 1, la funcion devuelve valor negativo.
  6.  else
  7.    return 'ERROR'; // SI vale otra cosa, sacamos un erro (Por ejemplo)
  8. }
  9.  
  10. if(funcion_academica(3) == 'gysaseds')
  11.   echo 'Hola'; // Lo va a mostrar
  12. if(function_academica(3) == 'ERROR')
  13.  echo 'Hola'; // Lo va a mostrar
  14. if(function_academica(3))
  15.  echo 'Hola'; // Lo va a mostrar
  16. if(!function_academica(3))
  17.  echo 'Hola'; // NO Lo va a mostrar

Esto pasa porque si hacemos comparativa con ==, no compara tipos de dato y mientras NO devuelva False, php interpreta que la funcion tubo exito y te entra por todos los if que no tengan un ! delante.

Etiquetas: funcion
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 19:11.