• php反射类 ReflectionClass


    php反射类 ReflectionClass

    什么是php反射类,顾名思义,可以理解为一个类的映射。

    举个例子:

    class fuc {        //定义一个类
    static function ec() {
    echo '我是一个类';
    }
    }
    $class=new ReflectionClass('fuc');    //建立 fuc这个类的反射类


    echo $class; //输出这反射类

    $fuc=$class->newInstance();  //相当于实例化 fuc 类
    $fuc->ec(); //执行 fuc 里的方法ec
    /*最后输出:我是一个类*/
    其中还有一些更高级的用法

    $ec=$class->getmethod('ec');  //获取fuc 类中的ec方法
    $fuc=$class->newInstance();  //实例化
    $ec->invoke($fuc);      //执行ec 方法


    上面的过程很熟悉吧。其实和调用对象的方法类似
    只不过这里是反着来的,方法在前,对象在后

    举例

      1. try{  
      2. //如果存在控制器名字的类  
      3. if(class_exists($this->getController())) {  
      4. //利用反射api构造一个控制器类对应的反射类  
      5. $rc = new ReflectionClass($this->getController());  
      6. //如果该类实现 了IController接口  
      7. if($rc->implementsInterface('IController')) {  
      8. //该类拥有解析后的action字符串所指向的方法名  
      9. if($rc->hasMethod($this->getAction())) {  
      10. //构造一个控制器类的实例  
      11. $controller = $rc->newInstance();  
      12. //获取该类$action参数所指向的方法对象  
      13. $method = $rc->getMethod($this->getAction());  
      14. //反射类方法对象的调用方式:  
      15. $method->invoke($controller);  
      16. else {  
      17. //以下为可能抛出异常  
      18. throw new Exception("Action");  
      19. }  
      20. else {  
      21. throw new Exception("Interface");  
      22. }  
      23. else {  
      24. throw new Exception("Controller");  
      25. }  
      26.     }catch(exception $e)  
      27.     {  
      28.         echo $e;  
      29.     } 
  • 相关阅读:
    Using a custom AxisRenderer object
    进度条
    flex 自定义tooltip
    深入理解JAVA虚拟机 垃圾收集器和内存分配策略
    深入理解JAVA虚拟机 自动内存管理机制
    oracle pl/sql 程序设计 历史笔记整理
    oracle sql 高级编程 历史笔记整理
    JAVA并发编程的艺术 Java并发容器和框架
    JAVA并发编程的艺术 JMM内存模型
    Java并发编程实战 第16章 Java内存模型
  • 原文地址:https://www.cnblogs.com/shsgl/p/4040533.html
Copyright © 2020-2023  润新知