Ver Mensaje Individual
  #8 (permalink)  
Antiguo 08/02/2011, 21:40
GaDo
 
Fecha de Ingreso: enero-2007
Mensajes: 16
Antigüedad: 17 años, 3 meses
Puntos: 0
Respuesta: __get Y __set Necesito una pequeña guia

Cita:
Iniciado por pateketrueke Ver Mensaje
creo que aquí tu imaginación no da para mas... así que te pongo un ejemplo muy básico del uso de dichos métodos:

imaginemos que tienes una clase de configuración, en la cual no te gustaría definir ninguna opción dentro de la misma clase... osea, que te gustaría que su comportamiento fuera dinámico...

entonces, veamos esto:
Código PHP:
$config = new Config('my.ini');
echo 
$config->site_title;
$config->my_option 'my_value'
si tu clase no usa dichos métodos mágicos, ¿como saber que la propiedad site_title existe?

si imprimes una propiedad inexistente lo que obtienes es un error de propiedad no definida...

en dado caso, imaginemos que en el constructor de dicha clase cargamos la configuración a partir del archivo especificado: my.ini


y bueno, ya con el método __get (que como dicta el manual) podrías acceder a dicha configuración de una forma transparente, no tendiendo que definir propiedad por propiedad dentro de tu clase...

en resumen, el método __get se invoca cuando se trata de leer propiedades inexistentes de un objeto, y __set se invoca cuando se trata de asignar dichas propiedades!!

PDTA: que conste que todo esto viene escrito en el manual, si los arboles te impiden ver el bosque, deberías cambiar de profesión y/o hobbie...
Me mandas a leer el manual e insinuas que no sirvo para esto. ¿Esta es la cordialidad del foro? Deberia de mandarte a hacer cursos de comprensión de lectura e ir a la escuela de nuevo si nos ponemos en ese tono tan burlesco ...

Voy a intentar explicarlo mas claro ..

Se como funcionan __get y __set. Se como se usa, se que las variables no declaradas dentro de la clase se colocan dentro de __get o sale error. Se todo lo que pones

Tanto cuesta entender lo que estoy preguntando ?. Solo estoy pidiendo un ejemplo practico. Mira

Código:
<?php

class Customer
{
    public $name;
    private $data = array();
    
    public function __set($dt, $vl)
    {
        $this->data[$dt] = $vl;
    }
    
    public function __get($dt)
    {
        return $this->data[$dt];
    }
}

$c = new Customer;
$c->name = "Sunil"; //El nombre es seteado (set) porque es publico
$c->email = "[email protected]"; // Asignando [email protected] en $email

echo $c->email;
?>
El codigo lo entiendo perfecto. Solo digo que me parece absurdo y con nula explicación. ¿Por que?

1. Porque si le pongo comentarios a los metodos de __set y __get ( /* */ ) igual me funciona el codigo. Ya que $c->email igual queda almacenado. Por ende el ejemplo es absurdo.

2. Entiendo perfectamente todo como explique mas arriba. __set lo que hace es crear data["Email"] = "[email protected]"

Lo unico que pido es un codigo con un uso practico de esto. Ya que, como dije anteriormente, si borro __set y __get el codigo me anda igual.

Espero que esta vez se haya entendido. Por favor cortenla con tratar de explicarme get y set porque lo entiendo. Espero no tener que repetirlo 10 veces.

Gracias

P.D: Y espero que me pidan disculpas por el pesimo trato ...

P.D2: Hay moderadores por aca imagino.

Anexo:

<?php

Código:
class Customer
{
    public $name;
    private $data = array();
}

$c = new Customer;
$c->name = "Sunil"; //El nombre es seteado (set) porque es publico
$c->email = "[email protected]"; // Asignando [email protected] en $email

echo $c->email;
?>
Removi get y set y el codigo funciona igual (era obvio sin siquiera removerlos). solo pido un ejemplo practico para poderlo ver mas claro ¿Tan dificil es entenderlo?