Foros del Web » Programando para Internet » PHP »

Duda con sintasix de eval()

Estas en el tema de Duda con sintasix de eval() en el foro de PHP en Foros del Web. Busque la documentacion en php... y vi un ejemplo .. el cual es el siguiente: Código PHP: <?php $cadena  =  'taza' ; $nombre  =  'cafe' ...
  #1 (permalink)  
Antiguo 16/04/2006, 16:11
Avatar de B**
B**
 
Fecha de Ingreso: enero-2006
Ubicación: Monterrey,Mexico
Mensajes: 952
Antigüedad: 18 años, 3 meses
Puntos: 3
Duda con sintasix de eval()

Busque la documentacion en php... y vi un ejemplo .. el cual es el siguiente:
Código PHP:
<?php
$cadena 
'taza';
$nombre 'cafe';
$cad 'Esta es una $cadena con mi $nombre en ella.';
echo 
$cad"\n";
eval(
"\$cad = \"$cad\";");
echo 
$cad"\n";
?>
El cual da por resultado:
Código:
Esta es una $cadena con mi $nombre en ella. Esta es una taza con mi cafe en ella.
Mi duda es por q se ponen las diagonales... por q en ese lugar y por q 2 veces se pone $cad
Gracias d antemano..
  #2 (permalink)  
Antiguo 17/04/2006, 06:38
Avatar de JorgitoAlfajor  
Fecha de Ingreso: enero-2006
Mensajes: 152
Antigüedad: 18 años, 3 meses
Puntos: 1
Bueno, como sabrás, eval() sirve para evaluar una cadena como código php, por lo que la cadena que le des como argumento a eval() debe contener código php válido. Ese ejemplo evalua el codigo:

$cad = "Esta es una $cadena con mi $nombre en ella.";

Es decir, lo que hace ese ejemplo es guardar dentro de $cad la cadena contenida en ella misma pero expandiendo las variables $cadena y $nombre. Cuando esta cadena se asigna a $cad (la tercer línea del ejemplo), dichas variables no se expanden porque la cadena se encuentra entre comillas simples, por lo que $cadena y $nombre no son tratadas como variables, sino como texto comun. Para que las variables se expandan (es decir, se muestre su contenido en lugar de su nombre) se utilizan las comillas dobles. Al evaluar $cad = "Esta es una $cadena con mi $nombre en ella."; las variables $cadena y $nombre son expandidas, por lo que el valor de $cad despues de la evaluacion sería el string "Esta es una taza con mi cafe en ella.". Ahora bien, como el argumento para eval es una cadena entre comillas dobles, si no utilizas la barra delante de $cad, esta variable será expandida y lo que se evaluaría seria algo asi:

Esta es una $cadena con mi $nombre en ella. = "Esta es una $cadena con mi $nombre en ella.";

Lo que obviamente no es lo que se quería evaluar (si evaluas eso obtendrás un error porque no es código php válido). La barra \ delante del $ sirve para que php interprete el $ no como el inicio del nombre de una variable, sino como un caracter comun.
Espero no haberte confundido más.
Saludos.
__________________
¿Se me entiende la letra?
  #3 (permalink)  
Antiguo 17/04/2006, 07:00
Avatar de uamistad  
Fecha de Ingreso: diciembre-2004
Ubicación: Cd. de México
Mensajes: 1.395
Antigüedad: 19 años, 4 meses
Puntos: 1
Hablando de eval() yo nunca he tenido necesidad de usarla, ¿alguno sí?
__________________
"Di no al Internet Explorer" -Proverbio Chino-
  #4 (permalink)  
Antiguo 17/04/2006, 07:09
Avatar de JorgitoAlfajor  
Fecha de Ingreso: enero-2006
Mensajes: 152
Antigüedad: 18 años, 3 meses
Puntos: 1
Cita:
Iniciado por uamistad
Hablando de eval() yo nunca he tenido necesidad de usarla, ¿alguno sí?
Yo nunca la he usado, pero creo que en una ocasión tuve en mente utilizarla para ejecutar código que debia guardar en la base de datos. Eso si, no me acuedo por qué tenia que guardar ese código.
Saludos.
__________________
¿Se me entiende la letra?
  #5 (permalink)  
Antiguo 17/04/2006, 10:08
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Yo tampoco he tenído necesidad de usarla .. (no quiere decir que no sea útil .. por algo existe dicha función ...)

A lo sumo alguna vez se me planteó de usar "eval()" para implementar un sistema de plantillas (templates) extremadamente básico. Al final usé las técnicas que usan motores de gestión de templates tipo "NokTemplates" que usan expresiones regulares y definen zonas "dinámicas" en la plantilla ({VARIABLE} .. etc)

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #6 (permalink)  
Antiguo 17/04/2006, 12:46
Avatar de B**
B**
 
Fecha de Ingreso: enero-2006
Ubicación: Monterrey,Mexico
Mensajes: 952
Antigüedad: 18 años, 3 meses
Puntos: 3
Gracias JorgitoAlfajor.. si te entendi, pero ahora me surgio otra duda..
eval() imprime algo? .. lo q pasa es q veo k en el ejemplo hay 2 echo... y los 2 imprimen $cad, entonces pk da como resultados dos cosas diferentes.. o eval() cambia el valor de una variable, o como esta eso..?
  #7 (permalink)  
Antiguo 17/04/2006, 13:52
Avatar de claudiovega  
Fecha de Ingreso: octubre-2003
Ubicación: Puerto Montt
Mensajes: 3.667
Antigüedad: 20 años, 6 meses
Puntos: 11
Cita:
Iniciado por uamistad
Hablando de eval() yo nunca he tenido necesidad de usarla, ¿alguno sí?
La encuentro muy útil cuando en la BD tienes una fórmula matemática y deseas resolver la ecuacion fácilmente sin tener que crear un parser para descubrir como operarla.
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 08:14.