Ver Mensaje Individual
  #10 (permalink)  
Antiguo 09/02/2011, 02:36
JaimeSavines
 
Fecha de Ingreso: octubre-2009
Mensajes: 245
Antigüedad: 14 años, 6 meses
Puntos: 17
Respuesta: __get Y __set Necesito una pequeña guia

Cita:
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?
Mira la utilidad de usar __get y __set es de crear objetos mas dinámicos respetando la encapsulacion te dejo un ejemplo practico de su uso.
Código PHP:
Ver original
  1. class User{
  2.  
  3.     private $data = array();
  4.     private $dbh;
  5.  
  6.     public function  __construct($user) {
  7.         $this->dbh = new PDO('mysql:host=localhost;dbname=dbtest', '','');
  8.         $query = "SELECT * FROM users WHERE username = ?";
  9.         $stm = $this->dbh->prepare($query);
  10.         $stm->execute(array($user));
  11.         $this->data  = $stm->fetch(PDO::FETCH_ASSOC);
  12.     }
  13.  
  14.     public function  __set($name, $value) {
  15.         if(isset($this->data[$name])){
  16.             $this->data[$name] = $value;
  17.         }
  18.     }
  19.  
  20.     public function  __get($name) {
  21.         if(isset($this->data[$name])){
  22.             return $this->data[$name];
  23.         }
  24.     }
  25.  
  26.     public function save() {
  27.         $sql = "UPDATE users SET name = ?, lastname = ?, username = ?, password = ? WHERE id_user = ?";
  28.         $stm = $this->dbh->prepare($sql);
  29.         $stm->execute(array($this->name,$this->lastname,$this->username,$this->password,$this->id_user));
  30.     }
  31.  
  32. }
  33.  
  34. $user = new User('jjsavines');
  35. echo $user->name .'<br />';
  36. echo $user->password .'<br />';
  37. echo $user->username .'<br />';
  38. $user->password = 'superv'; // change user password
  39. $user->save();
  40. echo $user->password .'<br />';

En este ejemplo me hice una mini implementación de un ActiveRecord, la ventaja en usar los métodos mágicos es que si mas adelante altero la estructura de la tabla users mi clase queda sin cambios, bueno con excepción del método save pero puede modificarse para que pase los elementos que debe y de esa forma no depender de los cambios en la tabla.
Este ejemplo es sencillo se puede hacer cosas mas complejas aprovechando los métodos, Pero como todo hay un punto flaco y es que es un problema para documentarlos con herramientas como phpDocumentor, pueden ser confusos y ademas siempre esta la opción de agregar un set o get manualmente.
Prueba el ejemplo por que lo estoy haciendo a la carrera y hay varias cosas que pase por alto como lo del save.
__________________
Saludos.