Ver Mensaje Individual
  #9 (permalink)  
Antiguo 08/01/2014, 08:30
Avatar de jonni09lo
jonni09lo
Colaborador
 
Fecha de Ingreso: septiembre-2011
Ubicación: Estigia
Mensajes: 1.471
Antigüedad: 12 años, 8 meses
Puntos: 397
Respuesta: Ejecutar sentencia desde variable

Cuncuerdo con @patriciomase sobre que "eval is evil" el principal problema de usar eval son los programadores inexpertos. Tomemos de ejemplo la clase

Código PHP:
Ver original
  1. <?php
  2. class miClase{
  3.     private $attr1;
  4.     private $attr2;
  5.      
  6.     public function __construct(){
  7.         $instr1 = '$this->attr1 = 1;';
  8.         $instr2 = '$this->attr2 = 2;';
  9.      
  10.         eval($instr1); //aquí hacer que $instr1 se "ejecute" de manera que:
  11.         echo $this->attr1; //debería mostrar "1"
  12.     }
  13. }
  14. ?>

Funciona, si. Es correcto? no. Por qué? porque no tiene sentido. Lo que quieres hacer es muy similar a esto (tomando el ejemplo de la clase):

Código PHP:
Ver original
  1. <?php
  2. class miClase{
  3.     private $attr1;
  4.     private $attr2;
  5.      
  6.     public function __construct($attr){
  7.         $this->setAttr($attr);
  8.         echo $this->attr1;
  9.     }
  10.    
  11.     protected function setAttr($attrs){
  12.         foreach( $attrs as $key => $value ){
  13.             $this->$key = $value;
  14.         }
  15.     }
  16. }
  17.  
  18. new miClase( array('attr1'=>'Hola mundo') );
  19. ?>


Cita:
Iniciado por DoHITB Ver Mensaje
Quiero probar lo del eval() por temas de ficheros y consultas externas.

Saludos.
Puedes dar un ejemplo REAL de lo que quieres hacer? ya que con los ejemplos que pones, nos hace pensar que no sabes realmente programar (con todo el respeto del mundo) y haces que no sepamos guiarte correctamente sobre lo que es mejor. Y si, el 99% de las cosas que normalmente la gente hace con eval se puede evitar .

Saludos
__________________
Haz preguntas inteligentes-Como ser Hacker
No hacer preguntas por mensaje privado. No sólo no es inteligente sino que es egoísta.