デモコードは次のとおりです:
<?php
クラスクラスワン{
関数 callClassOne() {
「クラス 1 内」を印刷します。
}
}
クラス ClassOneDelegator {
プライベート $targets;
関数 __construct() {
$this->target[] = 新しい ClassOne();
}
関数 __call($name, $args) {
foreach ($this->target as $obj) {
$r = 新しい ReflectionClass($obj);
if ($method = $r->getMethod($name)) {
if ($method->isPublic() && !$method->isAbstract()) {
return $method->invoke($obj, $args);
}
}
}
}
}
$obj = 新しい ClassOneDelegator();
$obj->callClassOne();
?>
出力結果:
クラス 1 で
彼のメソッドは、ClassOne クラスではなくプロキシ クラス ClassOneDelegator を通じて実装されていることがわかります。
同様に、次のコードも実行できます:
<?php
クラスクラスワン{
関数 callClassOne() {
「クラス 1 内」を印刷します。
}
}
クラス ClassOneDelegator {
プライベート $targets;
関数 addObject($obj) {
$this->target[] = $obj;
}
関数 __call($name, $args) {
foreach ($this->target as $obj) {
$r = 新しい ReflectionClass($obj);
if ($method = $r->getMethod($name)) {
if ($method->isPublic() && !$method->isAbstract()) {
return $method->invoke($obj, $args);
}
}
}
}
}
$obj = 新しい ClassOneDelegator();
$obj->addObject(new ClassOne());
$obj->callClassOne();
?>