PHP反射API汇总(转自低调小一博客)

来源:互联网 发布:深度睡眠软件 编辑:程序博客网 时间:2024/06/05 20:53

反射是指在PHP的运行状态中,扩展分析php程序,导出或者提取出关于类、方法、属性、参数等详细信息,甚至包括注释。这种动态获取的信息以及动态调用对象的方法的功能称为反射API。反射是操纵面向对象模型中元模型的API,其功能十分强大,可以帮助我们构建复杂,可扩展的应用。(ps:包括在工厂模式中的使用)

反射API是php内建的oop技术扩展,包括一些类、异常和接口,综合使用他们可用来帮助我们分析其它类,接口,方法,属性和扩展。这些oop扩展被称为反射。

ReflectionClass

[php] view plain copy
 print?
  1. <?php  
  2. class ReflectionClass implements Reflector  
  3. {  
  4.     final private __clone()  
  5.     public object __construct(string name)  
  6.     public string __toString()  
  7.     public static string export()  
  8.     //导出该类的详细信息  
  9.     public string getName()  
  10.     //取得类名或接口名  
  11.     public bool isInternal()  
  12.     //测试该类是否为系统内部类  
  13.     public bool isUserDefined()  
  14.     //测试该类是否为用户自定义类  
  15.     public bool isInstantiable()  
  16.     //测试该类是否被实例化过  
  17.     public bool hasConstant(string name)  
  18.     //测试该类是否有特定的常量  
  19.     public bool hasMethod(string name)  
  20.     //测试该类是否有特定的方法  
  21.     public bool hasProperty(string name)  
  22.     //测试该类是否有特定的属性  
  23.     public string getFileName()  
  24.     //取得定义该类的文件名,包括路径名  
  25.     public int getStartLine()  
  26.     //取得定义该类的开始行  
  27.     public int getEndLine()  
  28.     //取得定义该类的结束行  
  29.     public string getDocComment()  
  30.     //取得该类的注释  
  31.     public ReflectionMethod getConstructor()  
  32.     //取得该类的构造函数信息  
  33.     public ReflectionMethod getMethod(string name)  
  34.     //取得该类的某个特定的方法信息  
  35.     public ReflectionMethod[] getMethods()  
  36.     //取得该类的所有的方法信息  
  37.     public ReflectionProperty getProperty(string name)  
  38.     //取得某个特定的属性信息  
  39.     public ReflectionProperty[] getProperties()  
  40.     //取得该类的所有属性信息  
  41.     public array getConstants()  
  42.     //取得该类所有常量信息  
  43.     public mixed getConstant(string name)  
  44.     //取得该类特定常量信息  
  45.     public ReflectionClass[] getInterfaces()  
  46.     //取得接口类信息  
  47.     public bool isInterface()  
  48.     //测试该类是否为接口  
  49.     public bool isAbstract()  
  50.     //测试该类是否为抽象类  
  51.     public bool isFinal()  
  52.     //测试该类是否声明为final  
  53.     public int getModifiers()  
  54.     //取得该类的修饰符,返回值类型可能是个资源类型  
  55.     //通过Reflection::getModifierNames($class->getModifiers())进一步读取  
  56.     public bool isInstance(stdclass object)  
  57.     //测试传入的对象是否为该类的一个实例  
  58.     public stdclass newInstance(mixed* args)  
  59.     //创建该类实例  
  60.     public ReflectionClass getParentClass()  
  61.     //取得父类  
  62.     public bool isSubclassOf(ReflectionClass class)  
  63.     //测试传入的类是否为该类的父类  
  64.     public array getStaticProperties()  
  65.     //取得该类的所有静态属性  
  66.     public mixed getStaticPropertyValue(string name [, mixed default])  
  67.     //取得该类的静态属性值,若private,则不可访问  
  68.     public void setStaticPropertyValue(string name, mixed value)  
  69.     //设置该类的静态属性值,若private,则不可访问,有悖封装原则  
  70.     public array getDefaultProperties()  
  71.     //取得该类的属性信息,不含静态属性  
  72.     public bool isIterateable()  
  73.     public bool implementsInterface(string name)  
  74.     //测试是否实现了某个特定接口  
  75.     public ReflectionExtension getExtension()  
  76.     public string getExtensionName()  
  77. }  
  78. ?>  

工厂模式应用:

[php] view plain copy
 print?
  1. class MoveDataFactory  
  2. {  
  3.     /** 
  4.      * Description:简单工厂模式,根据mode选取不同实例化对象 
  5.      * @return 对象实例 
  6.      */  
  7.     public function GetMoveClass($classname)  
  8.     {  
  9.         $reflectionclass = new ReflectionClass($classname);  
  10.         return $reflectionclass->newInstance();  
  11.     }  
  12. }  
0 0
原创粉丝点击