Der Democode lautet wie folgt:
<?php
Klasse ClassOne {
Funktion callClassOne() {
drucken Sie „In Class One“;
}
}
Klasse ClassOneDelegator {
private $targets;
Funktion __construct() {
$this->target[] = new ClassOne();
}
Funktion __call($name, $args) {
foreach ($this->target as $obj) {
$r = new ReflectionClass($obj);
if ($method = $r->getMethod($name)) {
if ($method->isPublic() && !$method->isAbstract()) {
return $method->invoke($obj, $args);
}
}
}
}
}
$obj = new ClassOneDelegator();
$obj->callClassOne();
?>
Ausgabeergebnis:
In der ersten Klasse
Es ist ersichtlich, dass seine Methode über die Proxy-Klasse ClassOneDelegator und nicht über die ClassOne-Klasse implementiert wird.
Ebenso kann auch der folgende Code ausgeführt werden:
<?php
Klasse ClassOne {
Funktion callClassOne() {
drucken Sie „In Class One“;
}
}
Klasse ClassOneDelegator {
private $targets;
Funktion addObject($obj) {
$this->target[] = $obj;
}
Funktion __call($name, $args) {
foreach ($this->target as $obj) {
$r = new ReflectionClass($obj);
if ($method = $r->getMethod($name)) {
if ($method->isPublic() && !$method->isAbstract()) {
return $method->invoke($obj, $args);
}
}
}
}
}
$obj = new ClassOneDelegator();
$obj->addObject(new ClassOne());
$obj->callClassOne();
?>