Foros del Web » Programando para Internet » PHP »

eval() Exeption. Cachar el error.

Estas en el tema de eval() Exeption. Cachar el error. en el foro de PHP en Foros del Web. Hola, despues de bastante tiempo de no andar por aqui, regreso desesperado... Este es mi problema, resulta que con eval estoy evaluando una cadena que ...
  #1 (permalink)  
Antiguo 31/05/2007, 12:44
 
Fecha de Ingreso: noviembre-2004
Mensajes: 14
Antigüedad: 19 años, 5 meses
Puntos: 0
eval() Exeption. Cachar el error.

Hola, despues de bastante tiempo de no andar por aqui, regreso desesperado...

Este es mi problema, resulta que con eval estoy evaluando una cadena que contiene operadores logicos unos y ceros. De este tipo.

Código:
$cadena="(1&&0)||(0||1)"; 
eval('return '.$cadena.';');
En este ejemplo la funcion me regresaria 1 o true.
Esto funciona sin problemas, el GRAN problema es que cuando la cadena esta "malformada" regresa false y cuando la condicion es falsa tambien regresa false.

Entonces no puedo distinguir cuando esta malformada y cuando en realidad no cumple con la condición.

Para mi es muy importante hacer esa distinción.
Intente poner una excepción.

Código:
try{
   $cadena="(1&&0)||(0||1)"; 
   eval('return '.$cadena.';');
}
catch (Exception $e) {
   return("error");
}
Peeeeeero el manejo de excepciones no funciona con eval. por su tiempo de ejecucion.

Asi que no se como puedo cachar y diferenciar lo que me regresa.
Espero me haya dado a entender.

Muchas gracias
  #2 (permalink)  
Antiguo 31/05/2007, 12:49
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Re: eval() Exeption. Cachar el error.

mmm buena tu duda, pero porque no mejor haces esto:
Código PHP:
$cadena="(1&&0)||(0||1)"
$salida "";
$ret = eval('$salida = '.$cadena.';');
if( 
$ret == false ) {
      echo 
"Error en evaluacion";
} else {
      echo 
$salida;


Última edición por GatorV; 31/05/2007 a las 12:56
  #3 (permalink)  
Antiguo 31/05/2007, 14:49
 
Fecha de Ingreso: noviembre-2004
Mensajes: 14
Antigüedad: 19 años, 5 meses
Puntos: 0
Re: eval() Exeption. Cachar el error.

Primero que nada gracias por responder...
Intente lo que me comentabas

Código:
 $salida="";
      $res = eval('$salida = '.$prerequisitos.';');
      if($res==false){
         echo  "error de evaluacion".$res;
      }
      else{
         echo "<br>salida".$salida;
      }
Pero no funciona. la variable res siempre tiene false, no le regresa nada el eval y la variable salida es la que tiene lo que regresa la evaluación cero o uno.

Agradezco la ayuda.
Algo mas que se te ocurra?
  #4 (permalink)  
Antiguo 31/05/2007, 15:02
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Re: eval() Exeption. Cachar el error.

El problema es que según la documentación de eval, no te va a marcar si esta mal o no tu cadena, solo en caso de que esta mal te regresa false, no hay forma de que te diga que es lo que esta mal de la cadena, pero aunque sea asi puedes presentar de una mejor forma si es 0, o 1, o si esta mal la cadena.

Saludos.
  #5 (permalink)  
Antiguo 31/05/2007, 15:17
 
Fecha de Ingreso: noviembre-2004
Mensajes: 14
Antigüedad: 19 años, 5 meses
Puntos: 0
Re: eval() Exeption. Cachar el error.

Otra ves gracias por responder.

Yo no quiero que me diga que es lo que esta mal de la cadena, solamente como dices, quiero que me diga si esta mal o bien formada. Pero aparte quiero que me diga si el resultado de la evaluacion (la operacion binaria) es un uno o un cero.

Cuando el resultado de la evaluacion es uno, es mas que claro, por que la evaluacion es uno ya que la cadena estaba bien formada. Pero cuando regresa cero, no tienes forma de saber si ese cero fue resultado de la evaluacion binaria o de que la cadena estaba mal.

Si?
Saludos
  #6 (permalink)  
Antiguo 31/05/2007, 15:36
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Re: eval() Exeption. Cachar el error.

Si usas el código que te puse, si el valor que te regresa eval es false ($ret) es porque estaba mal formada, de lo contrario el resultado de la operación se guarda en $salida, ya sea un 1 o 0.

Saludos.
  #7 (permalink)  
Antiguo 31/05/2007, 15:41
 
Fecha de Ingreso: noviembre-2004
Mensajes: 14
Antigüedad: 19 años, 5 meses
Puntos: 0
Re: eval() Exeption. Cachar el error.

Eso pensaba cuando lo vi y cuando respondiste, pero ya lo probe y no es asi.
La variable de afuera ($ret) siempre devuelve falso aunque la de adentro sea verdadero o falso.
Ya lo probe.

Gracias
  #8 (permalink)  
Antiguo 31/05/2007, 15:48
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Re: eval() Exeption. Cachar el error.

mmm segun la documentacion de eval, regresa NULL si todo esta bien, asi que prueba con el operador de 3 iguales:
Código PHP:
$cadena="(1&&0)||(0||1)"
$salida "";
$ret = eval('$salida = '.$cadena.';');
if( 
$ret === false ) {
      echo 
"Error en evaluacion";
} else {
      echo 
$salida;

Asi verificas que sea igual y del tipo booleano y no nulo.

Saludos.
  #9 (permalink)  
Antiguo 31/05/2007, 15:54
 
Fecha de Ingreso: noviembre-2004
Mensajes: 14
Antigüedad: 19 años, 5 meses
Puntos: 0
De acuerdo Re: eval() Exeption. Cachar el error.

De verdad muchisimas gracias.
Por personas como tu pueden funcionar estas comunidades en las que no solo hay muchos que esperamos repuestas, si no que todos debemos ayudar.

Es justo lo que te iba a responer, si pongo la condicional de 3 si funciona.
Apenas hice 2 o 3 pruebas, pero parece que funciona a la perfeccion.

Muchas gracias.
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 10:03.