Ver Mensaje Individual
  #4 (permalink)  
Antiguo 10/03/2012, 06:01
Avatar de masterpuppet
masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 3 meses
Puntos: 845
Respuesta: Como hacer que PDO::FETCH_CLASS devuelva objetos con propiedades tipificad

Tienes varios problemas, el primero, para controlar lo que sea setea necesitas mutators(setters), luego tienes el problema de como funciona PDO::FETCH_CLASS, la única forma de interceptar el seteo de las propiedades es que estas no existan y se dispare el método mágico __set, con lo que tu clase quedaría algo así(voy a utilizar solo un par de propiedades):

Código PHP:
Ver original
  1. class Role
  2. {
  3.     /**
  4.      * @var array
  5.      */
  6.     private $data = array('id' => null, 'name' => '');
  7.  
  8.     /**
  9.      * @param integer $id
  10.      * @return Role provide fluent interface
  11.      */
  12.     public function setId($id)
  13.     {
  14.         $this->data['id'] = (int)$id;
  15.         return $this;
  16.     }
  17.  
  18.     /**    
  19.      * @return integer $id
  20.      */
  21.     public function getId()
  22.     {
  23.         return $this->data['id'];
  24.     }
  25.  
  26.     /**
  27.      * @param string $name
  28.      * @return Role provide fluent interface
  29.      */
  30.     public function setName($name)
  31.     {
  32.         $this->data['name'] = (string)$name;
  33.         return $this;
  34.     }
  35.  
  36.     /**    
  37.      * @return string
  38.      */
  39.     public function getName()
  40.     {
  41.         return $this->data['name'];
  42.     }    
  43.    
  44.     /**
  45.      * @param string $property
  46.      * @param mixed $value
  47.      */    
  48.     public function __set($property, $value)
  49.     {
  50.         $method = 'set' . ucfirst($property);
  51.         if(!method_exists($this, $method)){
  52.             throw new BadMethodCallException();
  53.         }
  54.         $this->$method($value);
  55.     }
  56. }

Espero el ejemplo te sirva para que al menos captes la idea, de todas formas si bien en tu lugar utilizaría un mapper en vez de PDO::FETCH_CLASS, tener las propiedades en un array no es lo mas adecuado, a la clase le quedaría por definir __get, __isset y __unset

Saludos.
__________________
http://es.phptherightway.com/
thats us riders :)