(转载)http://hi.baidu.com/daihui98/item/a67dfb8213055dd75f0ec165

 

php反射类 ReflectionClass

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

举个例子:

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

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

Class [ class A ] { @@  F:\phpweb\myPHP\test.php 23-30 - Constants [0] { } - Static properties [0] { } -  Static methods [0] { } - Properties [0] { } - Methods [1] { Method [ public method __construct ] { @@ F:\phpweb\myPHP\test.php 26 - 29 } }  }

$fuc=$class->newInstance();  //相当于实例化 fuc  类
$fuc->ec(); //执行  fuc 里的方法ec
/*最后输出:我是一个类*/

其中还有一些更高级的用法

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

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

举例

[php]
  1. try{
  2.  
  3. //如果存在控制器名字的类
  4.  
  5. if(class_exists($this->getController())) {
  6.  
  7. //利用反射api构造一个控制器类对应的反射类
  8.  
  9. $rc = new ReflectionClass($this->getController());
  10.  
  11. //如果该类实现 了IController接口
  12.  
  13. if($rc->implementsInterface('IController')) {
  14.  
  15. //该类拥有解析后的action字符串所指向的方法名
  16.  
  17. if($rc->hasMethod($this->getAction())) {
  18.  
  19. //构造一个控制器类的实例
  20.  
  21. $controller = $rc->newInstance();
  22.  
  23. //获取该类$action参数所指向的方法对象
  24.  
  25. $method = $rc->getMethod($this->getAction());
  26.  
  27. //反射类方法对象的调用方式:
  28.  
  29. $method->invoke($controller);
  30.  
  31. } else {
  32.  
  33. //以下为可能抛出异常
  34.  
  35. throw new Exception("Action");
  36. }
  37. } else {
  38. throw new Exception("Interface");
  39. }
  40. } else {
  41. throw new Exception("Controller");
  42. }
  43.  
  44. }catch(exception $e)
  45. {
  46. echo $e;
  47. }

(转载)php反射类 ReflectionClass的更多相关文章

  1. PHP的反射类ReflectionClass、ReflectionMethod使用实例

    PHP5 具有完整的反射API,添加对类.接口.函数.方法和扩展进行反向工程的能力. 反射是什么? 它是指在PHP运行状态中,扩展分析PHP程序,导出或提取出关于类.方法.属性.参数等的详细信息,包括 ...

  2. php反射类 ReflectionClass

    什么是php反射类,顾名思义,能够理解为一个类的映射.举个样例: class fuc {        //定义一个类static function ec() {echo '我是一个类';}}$cla ...

  3. Java反射机制(获取Class对象的三种方式+获取Class中的构造函数进行对象的初始化+获取反射类的字段+获取反射类的一般方法)

    反射技术其实就是动态加载一个指定的类,并获取该类中的所有内容.而且将字节码文件封装成对象,并将字节码文件中的内容都封装成对象,这样便于操作这些成员,简单来说:反射技术可以对一个类进行解剖,反射大大增强 ...

  4. PHP 反射类学习记录

    原文:http://www.upwqy.com/details/58.html 1 开发环境 windows TP5 参考文档 http://php.net/manual/zh/class.refle ...

  5. php反射类的使用及Laravel对反射的使用介绍

    PHP的反射类与实例化对象作用相反,实例化是调用封装类中的方法.成员,而反射类则是拆封类中的所有方法.成员变量,并包括私有方法等.就如“解刨”一样,我们可以调用任何关键字修饰的方法.成员.当然在正常业 ...

  6. PHP反射类的理解(代码篇)

    <?php/** * Created by PhpStorm. * User: * Date: 2017/6/12 * Time: 14:34 * 关于反射类的理解 */class Person ...

  7. C# 通过反射类动态调用DLL方法

    网上看了很多关于反射的思路和方法,发现这个还算不错 //使用反射方: using System; using System.Collections.Generic; using System.Linq ...

  8. 反射类属性生成DataTable

    public class People //类名 { private static string name; //字段 private string sex;//字段 public string Se ...

  9. C#语法糖之 ReflectionSugar 通用反射类

    用法很简单: ReflectionSugar rs = new ReflectionSugar(100);//缓存100秒 ,可以不填默认不缓存 rs.有嘛点嘛   性能测试: 性能测试类源码: ht ...

随机推荐

  1. Android设置虚线、圆角、渐变

    有图又真相,先上图再说. 点击效果: 设置虚线: <?xml version="1.0" encoding="utf-8"?> <shape  ...

  2. buffer cache chain 图

    http://orabase.org/index.php/author/djeday84/page/7/

  3. rsyslogd配置文件详解

    非常详细的rsyslogd配置文件解析 rsyslog服务和logrotate服务=========================================================== ...

  4. 使用APICloud设计物联网APP

    0.前言 1).APP功能: 1.控制室内插座的开关. 2.查看室内实时温湿度和温湿度趋势. 3.控制小车的行走,小车摄像头的开启/关闭.移动. 4.查看摄像头监控画面,可拍照并追溯. 5.查看服务器 ...

  5. (转)ThinkPHP系统常量

    __ROOT__ : 网站根目录地址 __APP__ : 当前项目(入口文件)地址 __URL__ : 当前模块地址 __ACTION__ : 当前操作地址 __SELF__ : 当前 URL 地址 ...

  6. windows 8.1 administrator相关设置

    一.windows 8.1 开启administrator用户 windows8.1中文版,由于默认不开启administrator用户,所以需要自己手动开启 启用administrator:在cmd ...

  7. jrae源码解析(一)

    jare用java实现了论文<Semi-Supervised Recursive Autoencoders for Predicting Sentiment Distributions>中 ...

  8. java学习——IO流

    字符流的由来:其实就是:字节流读取文字字节数据后,不直接操作而是先查指定的编码表.获取对应的文字.在对这个文字进行操作.简单说:字节流+编码表 ---------------------------- ...

  9. Visual Studio 2010 单元测试目录

    单元测试的重要性这里我就不多说了,以前大家一直使用NUnit来进行单元测试,其实早在Visual Studio 2005里面,微软就已经集成了一个叫Test的专门测试插件,经过几年的发展,这个工具现在 ...

  10. openssl 使用非阻塞 bio

    序 在项目中需要访问 https 加密的网页,为了保证并发性,需要用到非阻塞的 socket,搜索发现,这种使用场景的相关介绍不是很多,所以这里记录一下使用的过程. 在项目中,所使用的 ssl 库是老 ...