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 originalclass Wrapper
{
/**
* @var mysqli
*/
private $mysqli;
/**
* @param mysqli $mysqli
*/
public function __construct(mysqli $mysqli)
{
$this->mysqli = $mysqli;
}
/**
* @param string $property
* @return mixed
*/
public function __get($property)
{
if ('affected_rows' == $property) {
throw new DomainException('...');
}
if (!property_exists($this->mysqli, $property)) {
throw new RuntimeException('...');
}
return $this->mysqli->$property;
}
/**
* @param string $method
* @param array $params
* @return mixed
*/
public function __call($method, $params)
{
}
...
}
uso
Código PHP:
Ver original$mysqli = new mysqli('...');
$wrapper = new Wrapper($mysqli);
$result = $wrapper->query('select...');
echo $wrapper->field_count;//retorna el valor correspondiente
echo $wrapper->affected_rows;//throws DomainException
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.