反射的理解

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

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

  ReflectionClass

  [php]

  

  class ReflectionClass implements Reflector

  {

  final private __clone()

  public object __construct(string name)

  public string __toString()

  public static string export()

  //导出该类的详细信息

  public string getName()

  //取得类名或接口名

  public bool isInternal()

  //测试该类是否为系统内部类

  public bool isUserDefined()

  //测试该类是否为用户自定义类

  public bool isInstantiable()

  //测试该类是否被实例化过

  public bool hasConstant(string name)

  //测试该类是否有特定的常量

  public bool hasMethod(string name)

  //测试该类是否有特定的方法

  public bool hasProperty(string name)

  //测试该类是否有特定的属性

  public string getFileName()

  //取得定义该类的文件名,包括路径名

  public int getStartLine()

  //取得定义该类的开始行

  public int getEndLine()

  //取得定义该类的结束行

  public string getDocComment()

  //取得该类的注释

  public ReflectionMethod getConstructor()

  //取得该类的构造函数信息

  public ReflectionMethod getMethod(string name)

  //取得该类的某个特定的方法信息

  public ReflectionMethod[] getMethods()

  //取得该类的所有的方法信息

  public ReflectionProperty getProperty(string name)

  //取得某个特定的属性信息

  public ReflectionProperty[] getProperties()

  //取得该类的所有属性信息

  public array getConstants()

  //取得该类所有常量信息

  public mixed getConstant(string name)

  //取得该类特定常量信息

  public ReflectionClass[] getInterfaces()

  //取得接口类信息

  public bool isInterface()

  //测试该类是否为接口

  public bool isAbstract()

  //测试该类是否为抽象类

  public bool isFinal()

  //测试该类是否声明为final

  public int getModifiers()

  //取得该类的修饰符,返回值类型可能是个资源类型

  //通过Reflection::getModifierNames($class->getModifiers())进一步读取

  public bool isInstance(stdclass object)

  //测试传入的对象是否为该类的一个实例

  public stdclass newInstance(mixed* args)

  //创建该类实例

  public ReflectionClass getParentClass()

  //取得父类

  public bool isSubclassOf(ReflectionClass class)

  //测试传入的类是否为该类的父类

  public array getStaticProperties()

  //取得该类的所有静态属性

  public mixed getStaticPropertyValue(string name [, mixed default])

  //取得该类的静态属性值,若private,则不可访问

  public void setStaticPropertyValue(string name, mixed value)

  //设置该类的静态属性值,若private,则不可访问,有悖封装原则

  public array getDefaultProperties()

  //取得该类的属性信息,不含静态属性

  public bool isIterateable()

  public bool implementsInterface(string name)

  //测试是否实现了某个特定接口

  public ReflectionExtension getExtension()

  public string getExtensionName()

  }

  ?>

  工厂模式应用:

  [php]

  class MoveDataFactory

  {

  /**

  * Description:简单工厂模式,根据mode选取不同实例化对象

  * @return 对象实例

  */

  public function GetMoveClass($classname)

  {

  $reflectionclass = new ReflectionClass($classname);

  return $reflectionclass->newInstance();

  }

  }

稳定

产品可用性高于99.9%

贴心

全国7*24小时客服热线

专业

产品经理在线技术支持

快速

快速上线运营快

承诺

我们选择声誉

坚持

10年专注高端品质开发
  • 返回顶部