演示用代码如下所示: <div class="codetitle"><a style="CURSOR: pointer" data="21404" class="copybut" id="copybut21404" onclick="doCopy('code21404')"> 代码如下:<div class="codebody" id="code21404"> <?php class ClassOne { function callClassOne() { print "In Class One"; } } class ClassOneDelegator { private $targets; function construct() { $this->target[] = new ClassOne(); } function 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(); ?> 输出结果: In Class One 可见,通过代理类ClassOneDelegator来代替ClassOne类来实现他的方法。 同样的,如下的代码也是能够运行的: <div class="codetitle"><a style="CURSOR: pointer" data="13118" class="copybut" id="copybut13118" onclick="doCopy('code13118')"> 代码如下:<div class="codebody" id="code13118"> <?php class ClassOne { function callClassOne() { print "In Class One"; } } class ClassOneDelegator { private $targets; function addObject($obj) { $this->target[] = $obj; } function __call($name,$args); } } } } } $obj = new ClassOneDelegator(); $obj->addObject(new ClassOne()); $obj->callClassOne(); ?>
(编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|