• 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类来实现他的方法
    同样的,如下的代码也是能够运行的:

    class ClassOne {
        function callClassOne() {
            print "In Class One";
        }
    }
    class ClassOneDelegator {
        private $targets;
        function addObject($obj) {
            $this->target[] = $obj;
        }
        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->addObject(new ClassOne());
    $obj->callClassOne();
    
  • 相关阅读:
    poj 3096 Surprising Strings (set)
    hdu 4038 stone
    STL set 使用总结
    poj 3185 The Water Bowls (bfs 加未压缩)
    QPixmap显示图片
    addStretch的作用 .
    Qt SizeHint()
    StyleSheet
    linux编程守护进程编写
    Qt样式表的使用
  • 原文地址:https://www.cnblogs.com/myphoebe/p/1995476.html
Copyright © 2020-2023  润新知