reflection

<?php
    header('content-type:text/html;charset=utf-8');
    //tp 调度

    class IndexAction{
        public function index(){
                echo 'index <br>';
        }
        public function test($year = 2016, $month = 10, $day = 10){
             echo $year.'--------'.$month.'-----------'.$day.'<br>';
        }
        //前置处理
        public function _before_index(){
                echo    '<br> 前期处理....';
                echo    '<br>' .__FUNCTION__.'<br>';
        }
        //后置处理
        public function _after_index(){
                echo    '<br> 后期的处理';
                echo  __FUNCTION__.'<br>';
        }
    }


    /*
        (1)IndexAction中的方法和访问控制修饰符是不确定的,如果index方法是public,可以执行 _before_index.
        (2)如果存在_before_index 方法,并且是public的,执行该方法
        (3)执行test方法
        (4)再判断有没有_after_index方法,并且是public的,执行该方法

    */

    if(class_exists('IndexAction')){

        //创建一个reflectionClass 对象['IndexAction'类]
        $reflect_object = new ReflectionClass('IndexAction');
        //判断是否有index方法.
        if($reflect_object->hasMethod('index')){

            //创建一个index方法对象
            $reflect_method_index = $reflect_object->getMethod('index');
            if($reflect_method_index->isPublic()){

                //判断是否有 _before_index
                if($reflect_object->hasMethod('_before_index')){

                    $reflect_method_before = $reflect_object->getMethod('_before_index');

                    if($reflect_method_before->isPublic()){

                        $reflect_method_before->invoke($reflect_object->newInstance());
                    }

                }

                //调用test方法 
                $reflect_object->getMethod('test')->invoke($reflect_object->newInstance(), 2018, 11, 11);

                //判断是否有 _before_index
                if($reflect_object->hasMethod('_after_index')){

                    $reflect_method_after = $reflect_object->getMethod('_after_index');

                    if($reflect_method_after->isPublic()){

                        $reflect_method_after->invoke($reflect_object->newInstance());
                    }

                }

            }else{

                echo '<br> index 不是共有的,无法调用';
            }

        }else{

            echo '<br> 没有index无法调用..';
        }


    }else{
        echo '<br> 类不存在,无法执行调度';
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值