Ver Mensaje Individual
  #14 (permalink)  
Antiguo 25/08/2009, 09:41
Avatar de Webstudio
Webstudio
Colaborador
 
Fecha de Ingreso: noviembre-2001
Ubicación: 127.0.0.1
Mensajes: 3.499
Antigüedad: 23 años, 1 mes
Puntos: 69
Respuesta: Migracion hacia __set() y __get()

Igualmente, si bien es sano dejar de lado __set y __get, siempre podés hacer uso del método __call, en el cual podés establecer una implementación de setters y getters que incluso tenga control de scope. No debería ser muy dificil hacer algo asi :

Código PHP:
Ver original
  1. <?php
  2. class A {
  3.     protected $_attributes = array('nombre', 'apellido', 'edad');
  4.     protected $_data = array();
  5.    
  6.     function __call($name, $argument)
  7.     {
  8.         $type = strtolower(substr($name, 0, 3));
  9.         $att_name = strtolower(substr($name, 3));
  10.        
  11.         switch($type)
  12.         {
  13.             case 'get':
  14.                 if(in_array($att_name, $this->_attributes))
  15.                 {
  16.                     return $this->_data[$att_name];
  17.                 }
  18.                 throw new Exception('Atributo no existe, DANGER !!');
  19.             break;
  20.            
  21.             case 'set':
  22.                 if(in_array($att_name, $this->_attributes))
  23.                 {
  24.                     $this->_data[$att_name] = $argument[0];
  25.                     return $argument[0];
  26.                 }
  27.                 throw new Exception('Atributo no existe, DANGER !!');
  28.             break;
  29.            
  30.             default:
  31.                 throw new Exception('llamaste algo que no existe macho, media pila.');
  32.             break;
  33.         }
  34.     }
  35. }
  36. try {
  37.     $a = new A;
  38.     $a->setApellido('pablo');
  39. } catch(Exception $e) {
  40.     echo $e->getMessage();
  41. }
  42. ?>
__________________
Tutoriales Photoshop | Web-Studio.com.ar
Artículos PHP | ZonaPHP.com