• 技术文章 >php教程 >php手册

    PHP反射使用实例和PHP反射API的中文说明

    2016-06-06 20:20:41原创526

    这篇文章主要介绍了PHP反射使用实例和PHP反射API的中文说明,重点在对PHP的反射API中每个方法都做了中文说明,需要的朋友可以参考下

    最近在开发过程中需要获取某个类方法的参数数量、名称及参数顺序,好根据参数的名称来从$_GET里取值。

    如方法原型为test($uid,$score), 那么我就知道需要需要从$_GET取

    复制代码 代码如下:


    $uid = $_GET['uid'];

    $score = $_GET['score'];

    然后调用方法$obj->test($uid,$score)

    当然前提是约定好了参数名称和get方法传值变量名一致。

    采用PHP的反射API,获得函数参数名称和参数默认值的方法如下:

    复制代码 代码如下:


    <?php
    class testClass{

    public function testFunc($param1,$param2=0){

    }
    }

    $method = new ReflectionMethod('testClass', 'testFunc');
    $params = $method--->getParameters();
    foreach ($params as $param) {
    echo 'param name: ' . $param->getName(),"\n";
    if ($param->isOptional()) {
    echo 'Default value: ' . $param->getDefaultValue(),"\n";
    }
    }

    下面是PHP反射API的介绍:

    1、用途:
    该扩展分析php程序,导出或提取出关于类、方法、属性、参数等的详细信息,,包括注释。
    Reflection可以说是对php库函数:“Classes/Objects 类/对象函数”的一个扩展。
    主要用在通过程序检测现有php程序内部关于类、方法等信息,并做出处理。

    2、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 { }

    3、详细说明:(例子详见php手册)

    复制代码 代码如下:


    ①Reflection类
    <?php
    class Reflection
    {
    public static mixed export(Reflector r [,bool return])
    //导出一个类或方法的详细信息
    public static array getModifierNames(int modifiers)
    //取得修饰符的名字
    }
    ?>

    ②ReflectionException类

    该类继承标准类,没特殊方法和属性。

    ③ReflectionFunction类
    <?php
    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类:
    <?php
    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类:
    <?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()
    }
    ?>

    ⑥ReflectionMethod类:
    <?php
    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()
    //测试该方法是否为final
    public bool isAbstract()
    //测试该方法是否为abstract
    public bool isPublic()
    //测试该方法是否为public
    public bool isPrivate()
    //测试该方法是否为private
    public bool isProtected()
    //测试该方法是否为protected
    public bool isStatic()
    //测试该方法是否为static
    public bool isConstructor()
    //测试该方法是否为构造函数
    public bool isDestructor()
    //测试该方法是否为析构函数
    public int getModifiers()
    //取得该方法的修饰符
    public ReflectionClass getDeclaringClass()
    //取得该方法所属的类
    // Inherited from ReflectionFunction
    final 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类:
    <?php
    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()
    //测试该属性名是否为public
    public bool isPrivate()
    //测试该属性名是否为private
    public bool isProtected()
    //测试该属性名是否为protected
    public bool isStatic()
    //测试该属性名是否为static
    public bool isDefault()
    public int getModifiers()
    //取得修饰符
    public mixed getValue(stdclass object)
    //取得该属性值
    public void setValue(stdclass object, mixed value)
    //设置该属性值
    public ReflectionClass getDeclaringClass()
    //取得定义该属性的类
    public string getDocComment()
    //取得该属性的注释
    }
    ?>

    ⑧ReflectionExtension类
    <?php
    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()
    }
    ?>

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    上一篇:ThinkPHP框架实现session跨域问题的解决方法 下一篇:用PHP解决的一个栈的面试题
    PHP编程就业班

    相关文章推荐

    • 让PHP支持页面回退的两种方法[转]• 第十四节 命名空间 [14]• Windows下搭建PHP开发环境• 动态网页技术PHP程序字符串处理函数• PHP应用分页显示制作详细讲解

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网