PHP 反射机制实例

老牛浏览 323评论 0发表于

注意:

  1. 先获取反射类

  2. 获取反射方法

php
<?php
    header("content-type:text/html;charset=utf-8");
    /*
     * 反射机制练习
     * 要求:
     * 1.如果start方法存在,且为public,使用反射机制调用Woker方法;否则提示错误;
     * 2.判断step存在,并为public,就执行;
     * 3.判断stop存在,并为public,就执行;
     * 4.输出Worker类的全部信息;
     */
    class Worker{
        public function start($worker_name){
            echo $worker_name . '开始工作';
        }
        public function step($pro_name){
            echo '<br> 开始处理' . $pro_name;
        }
        public function stop(){
            echo '<br> 停止工作';
        }
    }
    //获取反射类
    $reflector = new ReflectionClass('Worker');
    //判断start是否存在并为public,是则执行,否则提示错误
    if($reflector->hasMethod('start')){
        if($reflector->getMethod('start')->isPublic())
        $reflector->getMethod('start')->invoke($reflector->newInstance());
        //判断step方法是否存在并为public,是则执行
        if($reflector->hasMethod('step')){
            if($reflector->getMethod('step')->isPublic()){
                $reflector->getMethod('step')->invoke($reflector->newInstance(),'老牛');
            }
        }
        //判断stop方法是否存在并为public,是则执行
        if($reflector->hasMethod('stop')){
            if($reflector->getMethod('stop')->isPublic()){
                $reflector->getMethod('stop')->invoke($reflector->newInstance());
            }
        }
        echo '<pre>';
        echo '类的对象:<br>';
        var_dump($reflector->getProperties());
        echo '类的方法:<br>';
        var_dump($reflector->getMethods());
    }else{
        echo '不存在 start 方法';
    }
?>

页面输出内容:

bash
开始工作
开始处理老牛
停止工作
类的对象:
array(0) {
}
类的方法:
array(3) {
  [0]=>
  &object(ReflectionMethod)#3 (2) {
    ["name"]=>
    string(5) "start"
    ["class"]=>
    string(6) "Worker"
  }
  [1]=>
  &object(ReflectionMethod)#2 (2) {
    ["name"]=>
    string(4) "step"
    ["class"]=>
    string(6) "Worker"
  }
  [2]=>
  &object(ReflectionMethod)#4 (2) {
    ["name"]=>
    string(4) "stop"
    ["class"]=>
    string(6) "Worker"
  }
}
点赞
收藏
暂无评论,快来发表评论吧~
私信
老牛@ilaoniu
老牛,俗称哞哞。单纯的九零后理工小青年。喜欢折腾,爱玩,爱音乐,爱游戏,爱电影,爱旅游...
最后活跃于