El código de demostración es el siguiente:
<?php
clase Clase Uno {
función llamadaClassOne() {
imprimir "En Clase Uno";
}
}
clase ClassOneDelegator {
objetivos $ privados;
función __construct() {
$this->objetivo[] = nueva ClassOne();
}
función __call($nombre, $argumentos) {
foreach ($this->objetivo como $obj) {
$r = nueva Clase de Reflexión ($obj);
if ($método = $r->getMethod($nombre)) {
if ($método->isPublic() && !$método->isAbstract()) {
return $método->invocar($obj, $args);
}
}
}
}
}
$obj = nuevo ClassOneDelegator();
$obj->callClassOne();
?>
Resultado de salida:
en clase uno
Se puede ver que su método se implementa a través de la clase proxy ClassOneDelegator en lugar de la clase ClassOne.
De manera similar, también se puede ejecutar el siguiente código:
<?php
clase Clase Uno {
función llamadaClassOne() {
imprimir "En Clase Uno";
}
}
clase ClassOneDelegator {
objetivos $ privados;
función agregarObjeto($obj) {
$this->objetivo[] = $obj;
}
función __call($nombre, $argumentos) {
foreach ($this->objetivo como $obj) {
$r = nueva Clase de Reflexión ($obj);
if ($método = $r->getMethod($nombre)) {
if ($método->isPublic() && !$método->isAbstract()) {
return $método->invocar($obj, $args);
}
}
}
}
}
$obj = nuevo ClassOneDelegator();
$obj->addObject(nueva ClassOne());
$obj->callClassOne();
?>