Foros del Web » Programando para Internet » PHP » Frameworks y PHP orientado a objetos »

Metodos introspectivos ??

Estas en el tema de Metodos introspectivos ?? en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Hola, tengo una duda ademas de no saber si se dice así "Metodos Introspectivos" Recojo parametros de un form mediante un foreach, con lo que ...
  #1 (permalink)  
Antiguo 13/10/2006, 02:10
 
Fecha de Ingreso: junio-2005
Mensajes: 343
Antigüedad: 18 años, 10 meses
Puntos: 10
Metodos introspectivos ??

Hola, tengo una duda ademas de no saber si se dice así "Metodos Introspectivos"

Recojo parametros de un form mediante un foreach, con lo que tengo y me gustaría que al mismo tiempo, se cargaran en un objeto de una de mis clases.

mis metodos tienen el prefijo "set#####", donde ##### sería el nombre del campo con la primera letra mayuscula, me pueden indicar si esto se podría hacer ?? y como ?? se deberia usar la funcion eval no ?? xo ese es el último paso, que pasaria si no existiera el método en la clase ??
  #2 (permalink)  
Antiguo 13/10/2006, 10:03
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Que tal jorgivaz

PHP para eso tiene metodos magicos, por lo que es mucho mas recomendable utilizarlos a usar eval() (dicen por ahi que no es lo mas recomendable), los metodos que puedes usar serian:

__get( $varname ), __set( $varname, $value )

con esos puedes hacer algo asi:
Código PHP:
$obj = new miObjeto();
$obj->variable1 $valor
eso equivale a:
Código PHP:
$obj->__set'variable1'$valor ); 
E internamente puedes guardarlo en un array, o algo similar:
Código PHP:
class miObjeto {
    private 
$fields = array();
    public function 
__set$varname$value ) {
          
$this->fields[$varname] = $value;
    }
    public function 
__get$varname ) {
          return 
$this->fields[$varname];
    }

Tambien si estas usando el SPL puedes usar metodos como array access para hablar con un objeto como si fuera un array.

Espero te pueda ayudar con esto, saludos!.
  #3 (permalink)  
Antiguo 16/10/2006, 08:36
 
Fecha de Ingreso: junio-2005
Mensajes: 343
Antigüedad: 18 años, 10 meses
Puntos: 10
Esto no me sirve, xq jo quiero ejecutar un comando tipo

setNombre()
setApellido()

y la parte comun es set, y la otra depende del parametro que recojo de un formulario.
  #4 (permalink)  
Antiguo 16/10/2006, 10:41
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Mira supon el siguiente caso:

La forma HTML:
Código:
<form action="destino.php" method="post">
<input type="text" name="Nombre" />
<input type="text" name="Apellido" />
<inpur type="text" name="Edad" />
</form>
Tu objeto:
Código PHP:
class Persona {
      private 
$datos = array();

      public function 
__construct() {}
 
      public function 
__set$nombre$valor ) {
              
$this->datos[$nombre] = $valor;
      }

      public function 
getDatos() {
              return 
$this->datos;
      }

Tu archivo de implementacion:
Código PHP:
$persona = new Persona();
foreach( 
$_POST as $name => $value ) {
       
$persona->$name $value;
}

$datos $persona->getData();
print_r$datos ); 
Esto te debe de dar una salida similar a:
Código:
array(3) {
    "Nombre"=>"Fulano",
    "Apellido"=>"Sutano",
    "Edad" => 15
}
  #5 (permalink)  
Antiguo 17/10/2006, 07:36
 
Fecha de Ingreso: junio-2005
Mensajes: 343
Antigüedad: 18 años, 10 meses
Puntos: 10
Pero yo no tengo un array, tengo objetos, strings, ints.

Yo queria hacerlo del modo de

eval("setCampo($valor)");

pero el problema esta en que si el método setCampo no esta que pasa ?
  #6 (permalink)  
Antiguo 17/10/2006, 08:13
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Si haces una llamada a un metodo no definido se provoca un error, por eso es que la opcion que te digo es mas efectiva, pero tambien pudes usar el metodo magico __call, para funciones no definidas.

asi puedes usar:
Código PHP:
eval( '$instancia->setNombre("' $valor '");'); 
Si usas __call podras atrapar metodos no definidos y evitar que se genere un error.
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 05:34.