Ver Mensaje Individual
  #11 (permalink)  
Antiguo 01/02/2013, 22:19
Avatar de masterpuppet
masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 11 meses
Puntos: 845
Respuesta: function "magic" __get

Te dejo una referencia a Object Composition y googleando un poco encontraras mucho material sobre el tema, de todas formas te dejo un pequeño ejemplo de a lo que me refiero.

Código PHP:
Ver original
  1. class Wrapper
  2. {
  3.     /**
  4.      * @var mysqli
  5.      */
  6.     private $mysqli;
  7.  
  8.     /**
  9.      * @param mysqli $mysqli
  10.      */
  11.     public function __construct(mysqli $mysqli)
  12.     {
  13.         $this->mysqli = $mysqli;
  14.     }
  15.  
  16.     /**
  17.      * @param  string $property
  18.      * @return mixed
  19.      */
  20.     public function __get($property)
  21.     {
  22.         if ('affected_rows' == $property) {
  23.             throw new DomainException('...');
  24.         }
  25.         if (!property_exists($this->mysqli, $property)) {
  26.             throw new RuntimeException('...');
  27.         }
  28.         return $this->mysqli->$property;
  29.     }
  30.  
  31.     /**
  32.      * @param  string $method
  33.      * @param  array  $params
  34.      * @return mixed
  35.      */
  36.     public function __call($method, $params)
  37.     {
  38.         return call_user_func_array(array($this->mysqli, $method), $params);
  39.     }
  40.        
  41.        ...
  42. }

uso

Código PHP:
Ver original
  1. $mysqli  = new mysqli('...');
  2. $wrapper = new Wrapper($mysqli);
  3. $result  = $wrapper->query('select...');
  4. echo $wrapper->field_count;//retorna el valor correspondiente
  5. echo $wrapper->affected_rows;//throws DomainException
  6. echo $wrapper->propiedad_que_no_existe;//throws RuntimeException

y sobre las restricciones de __get, pues si, esta en el manual(www.php.net/manual/en/language.oop5.overloading.php#object.get) y cito

Cita:
__get() is utilized for reading data from inaccessible properties.
Saludos.
__________________
http://es.phptherightway.com/
thats us riders :)