php 使用映射执行授权模式的例子

映射类ReflectionClass可以在运行中查询类名,函数名,变量等等很多信息,给编程带来很大灵活性,详细信息可以查看php帮助文档,

以下是使用映射执行授权模式的简单例子例子(程序已经过调试OK)。

<?php


    class ClassOne {
        function callClassOne() {
            echo "In Class One\n";
        }
    }

    class ClassTwo {
        function callClassTwo() {
            echo "In Class Two\n";
        }
    }

    class ClassOneDelegator {
        public $ targets;
        function __construct() {
            $this-> targets[] = new ClassOne();
        }

        function addObject($obj) {
            $this-> targets[] = $obj;       

        }


        function __call($name, $args) {
            
            foreach ($this->targets as $obj) {
                $r = new ReflectionClass($obj);
                if(!$r->hasMethod($name))continue;    
                if ($method = $r->getMethod($name)) {
                    if ($method->isPublic() && !$method->isAbstract()) {
                        return $method->invoke($obj, $args);
                    }
                }
                echo $obj . "\n";
            }
        }

    }

    $obj = new ClassOneDelegator();
    $obj->addObject(new ClassTwo());
    $obj->callClassOne();
    $obj->callClassTwo();
?>

输出:


教材中的例子。但是经过我的修正(红色字体)后才能正常运行。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值