الكود التجريبي هو كما يلي:
<?php
فئة كلاس وان {
استدعاء الدالة ClassOne() {
طباعة "في الدرجة الأولى"؛
}
}
فئة كلاس وان ديليغاتور {
أهداف خاصة $؛
وظيفة __ بناء () {
$this->target[] = new ClassOne();
}
الدالة __call($name, $args) {
foreach ($this->الهدف كـ $obj) {
$r = new ReflectionClass($obj);
إذا ($method = $r->getMethod($name)) {
إذا ($method->isPublic() && !$method->isAbstract()) {
إرجاع $method->invoc($obj, $args);
}
}
}
}
}
$obj = new ClassOneDelegator();
$obj->callClassOne();
?>
نتيجة الإخراج:
في الصف الأول
يمكن ملاحظة أن طريقته يتم تنفيذها من خلال فئة الوكيل ClassOneDelegator بدلاً من فئة ClassOne.
وبالمثل، يمكن أيضًا تشغيل التعليمات البرمجية التالية:
<?php
فئة كلاس وان {
استدعاء الدالة ClassOne() {
طباعة "في الدرجة الأولى"؛
}
}
فئة كلاس وان ديليغاتور {
أهداف خاصة $؛
وظيفة addObject($obj) {
$this->target[] = $obj;
}
الدالة __call($name, $args) {
foreach ($this->الهدف كـ $obj) {
$r = new ReflectionClass($obj);
إذا ($method = $r->getMethod($name)) {
إذا ($method->isPublic() && !$method->isAbstract()) {
إرجاع $method->invoc($obj, $args);
}
}
}
}
}
$obj = new ClassOneDelegator();
$obj->addObject(new ClassOne());
$obj->callClassOne();
?>