php反射常用的函数

反射

面向对象编程中对象被赋予了自省的能力,而这个自省的过程就是反射。

反射,直观理解就是根据到达地找到出发地和来源。比如,一个光秃秃的对象,我们可以仅仅通过这个对象就能知道它所属的类、拥有哪些方法。

反射是指在PHP运行状态中,扩展分析PHP程序,导出或提出关于类、方法、属性、参数等的详细信息,包括注释。这种动态获取信息以及动态调用对象方法的功能称为反射API。

在平常开发中,用到反射的地方不多:一个是对对象进行调试,另一个是获取类的信息。在MVC和插件开发中,使用反射很常见,但是反射的消耗也很大,在可以找到替代方案的情况下,就不要滥用。

PHP有Token函数,可以通过这个机制实现一些反射功能。从简单灵活的角度讲,使用已经提供的反射API是可取的。

很多时候,善用反射能保持代码的优雅和简洁,但反射也会破坏类的封装性,因为反射可以使本不应该暴露的方法或属性被强制暴露了出来,这既是优点也是缺点


反射API提供的常用类和函数:

下面提供的函数是常用的函数,不是全部,有的函数根本用不到,想看全部的可以到网上搜一下,比较多。提供的这组方法没有必要背下来,用到的时候可以查看。


 1:Reflection
   public static export(Reflector r [,bool return])//打印类或方法的详细信息
   public static  getModifierNames(int modifiers)  //取得修饰符的名字
 
 2:ReflectionMethod:
     public static string export()                       //打印该方法的信息
     public mixed invoke(stdclass object, mixed* args)   //调用对应的方法
     public mixed invokeArgs(stdclass object, array args)//调用对应的方法,传多参数
     public bool isFinal()        //方法是否为final
     public bool isAbstract()     //方法是否为abstract
     public bool isPublic()       //方法是否为public
     public bool isPrivate()      //方法是否为private
     public bool isProtected()    //方法是否为protected
     public bool isStatic()       //方法是否为static
     public bool isConstructor()  //方法是否为构造函数
 
 3:ReflectionClass:
     public static string export()  //打印类的详细信息
     public string getName()        //取得类名或接口名
     public bool isInternal()       //类是否为系统内部类
     public bool isUserDefined()    //类是否为用户自定义类
     public bool isInstantiable()   //类是否被实例化过
     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()   //测试该类是否为抽象类
 
 4:ReflectionParameter:
     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()        //取得该参数的默认值
 
 5:ReflectionExtension类
     public static  export()    //导出该扩展的所有信息
     public string getName()    //取得该扩展的名字
     public string getVersion() //取得该扩展的版本
     public ReflectionFunction[] getFunctions()   //取得该扩展的所有函数
     public array getConstants()  //取得该扩展的所有常量
     public array getINIEntries() //取得与该扩展相关的,在php.ini中的指令信息
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值