反射是什么?
它是指在php运行状态中,扩展分析php程序,导出或提取出关于类、方法、属性、参数等的详细信息,包括注释。这种动态获取的信息以及动态调用对象的方法的功能称为反射api。
反射api概览:class reflection { }interface reflector { }class reflectionexception extends exception { }class reflectionfunction implements reflector { }class reflectionparameter implements reflector { }class reflectionmethod extends reflectionfunction { }class reflectionclass implements reflector { }class reflectionobject extends reflectionclass { }class reflectionproperty implements reflector { }class reflectionextension implements reflector { }详细说明:(例子详见php手册)①reflection类class reflection{public static mixed export(reflector r [,bool return])//导出一个类或方法的详细信息public static array getmodifiernames(int modifiers)//取得修饰符的名字}②reflectionexception类该类继承标准类,没特殊方法和属性。③reflectionfunction类class reflectionfunction 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 string getfilename()//取得文件名,包括路径名public int getstartline()//取得定义函数的起始行public int getendline()//取得定义函数的结束行public string getdoccomment()//取得函数的注释public array getstaticvariables()//取得静态变量public mixed invoke(mixed* args)//调用该函数,通过参数列表传参数public mixed invokeargs(array args)//调用该函数,通过数组传参数public bool returnsreference()//测试该函数是否返回引用public reflectionparameter[] getparameters()//取得该方法所需的参数,返回值为对象数组public int getnumberofparameters()//取得该方法所需的参数个数public int getnumberofrequiredparameters()//取得该方法所需的参数个数}④reflectionparameter类:class reflectionparameter implements reflector{final private __clone()public object __construct(string name)public string __tostring()public static string export()//导出该参数的详细信息public string getname()//取得参数名public bool ispassedbyreference()//测试该参数是否通过引用传递参数public reflectionclass getclass()//若该参数为对象,返回该对象的类名public bool isarray()//测试该参数是否为数组类型public bool allowsnull()//测试该参数是否允许为空public bool isoptional()//测试该参数是否为可选的,当有默认参数时可选public bool isdefaultvalueavailable()//测试该参数是否为默认参数public mixed getdefaultvalue()//取得该参数的默认值}⑤reflectionclass类: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()//测试该类是否声明为finalpublic 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()}⑥reflectionmethod类:class reflectionmethod extends reflectionfunction{public __construct(mixed class, string name)public string __tostring()public static string export()//导出该方法的信息public mixed invoke(stdclass object, mixed* args)//调用该方法public mixed invokeargs(stdclass object, array args)//调用该方法,传多参数public bool isfinal()//测试该方法是否为finalpublic bool isabstract()//测试该方法是否为abstractpublic bool ispublic()//测试该方法是否为publicpublic bool isprivate()//测试该方法是否为privatepublic bool isprotected()//测试该方法是否为protectedpublic bool isstatic()//测试该方法是否为staticpublic bool isconstructor()//测试该方法是否为构造函数public bool isdestructor()//测试该方法是否为析构函数public int getmodifiers()//取得该方法的修饰符public reflectionclass getdeclaringclass()//取得该方法所属的类// inherited from reflectionfunctionfinal private __clone()public string getname()public bool isinternal()public bool isuserdefined()public string getfilename()public int getstartline()public int getendline()public string getdoccomment()public array getstaticvariables()public bool returnsreference()public reflectionparameter[] getparameters()public int getnumberofparameters()public int getnumberofrequiredparameters()}⑦reflectionproperty类:class reflectionproperty implements reflector{final private __clone()public __construct(mixed class, string name)public string __tostring()public static string export()//导出该属性的详细信息public string getname()//取得该属性名public bool ispublic()//测试该属性名是否为publicpublic bool isprivate()//测试该属性名是否为privatepublic bool isprotected()//测试该属性名是否为protectedpublic bool isstatic()//测试该属性名是否为staticpublic bool isdefault()public int getmodifiers()//取得修饰符public mixed getvalue(stdclass object)//取得该属性值public void setvalue(stdclass object, mixed value)//设置该属性值public reflectionclass getdeclaringclass()//取得定义该属性的类public string getdoccomment()//取得该属性的注释}⑧reflectionextension类class reflectionextension implements reflector {final private __clone()public __construct(string name)public string __tostring()public static string export()//导出该扩展的所有信息public string getname()//取得该扩展的名字public string getversion()//取得该扩展的版本public reflectionfunction[] getfunctions()//取得该扩展的所有函数public array getconstants()//取得该扩展的所有常量public array getinientries()//取得与该扩展相关的,在php.ini中的指令信息public reflectionclass[] getclasses()public array getclassnames()}
