Cuando un método no esta explicitamente declarado para un objeto,
PHP 5 puede pasar la ejecución a un método especial llamado __call().
<?php
class Delegador {
private gato;
private perro;
function __construct() {
$this->gato = new Gato();
$this->perro = new Perro()
}
function __call($methodName, $args) {
if ($methodName == 'maulla') {
return $this->gato->maulla($args);
} else (
return $this->perro->$methodName($args);
}
}
}
$obj = new Delegador();
echo $obj->ladra('fuerte'); // usa al perro
echo $obj->maulla('suave'); // usa al gato
echo $obj->muerde(); // el perro de nuevo
?>