PHP反射API

来源:岁月联盟 编辑:exp 时间:2012-10-24

反射的理解
它是指在php的运行状态中,扩展分析php程序,导出或者提取出关于类、方法、属性、参数等详细信息,甚至包括注释。这种动态获取的信息以及动态调用对象的方法的功能称为反射API。反射是操纵面向对象模型中元模型的API,其功能十分强大,可以帮助我们构建复杂,可扩展的应用。(ps:包括在工厂模式中的使用)
反射API是php内建的oop技术扩展,包括一些类、异常和接口,综合使用他们可用来帮助我们分析其它类,接口,方法,属性和扩展。这些oop扩展被称为反射。
ReflectionClass
[php] 
<?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(); 
    }