`
zhangchibang
  • 浏览: 346368 次
社区版块
存档分类
最新评论

php反射

    博客分类:
  • PHP
PHP 
阅读更多

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() 

?> 

4。附: 

其实从第二点API概览可以看出:接口挺好用的。 
一方面Reflector接口为Reflection小系统提供了一个很好的接口命名规范, 
每个实现他的类都须按他的规范,从外部看来,这个小系统API很统一。 
另一方面由于很多类实现了Reflector接口, 
在这样的类层次结构中,若想实现多态是很容易的。

分享到:
评论

相关推荐

    php 反射简单例子

    本文将深入探讨PHP反射的工作原理,并通过一个简单的例子来说明其用法。 1. PHP反射基础 反射API是PHP内建的一组类,它提供了对类、接口、函数、方法和常量等对象的元数据访问。这些类包括`\ReflectionClass`、`\...

    php反射api.pdf

    ### PHP反射API详解 #### 一、概述 **PHP反射API**是一种强大的工具,它允许开发者在运行时分析和操作程序中的类、方法、属性、参数等元素。反射API不仅能够帮助开发者深入了解程序结构,还能在某些场景下实现动态...

    php 反射详细实例

    详细介绍了php如何利用反射机制调用类的函数,包括调用静态函数和非静态函数用法的区别

    PHP反射介绍

    ### PHP反射机制详解 #### 一、PHP反射机制概述 PHP反射机制是PHP的一个核心功能之一,它允许程序运行时动态地获取类、接口、函数等的信息,并且能够调用这些对象的功能。通过PHP反射机制,开发人员可以更加灵活地...

    【RBAC权限管理】基于php+tp5.0采用php反射处理RBAC权限管理.zip

    基于php+tp5.0采用php反射处理RBAC权限管理.zip 始的目录结构如下: www WEB部署目录(或者子目录) ├─application 应用目录 │ ├─common 公共模块目录(可以更改) │ ├─admin 后台模块 │ │ ├─config....

    PHP反射原理与用法深入分析

    PHP反射API提供了丰富的功能,包括创建类的实例、查看类的方法和属性、检查类的元数据以及动态调用方法。本文将深入探讨PHP反射的原理、用法以及其在实际开发中的应用场景。 ### 反射原理 反射的基本原理是通过...

    PHP反射机制原理与用法详解

    PHP反射机制是面向对象编程中的一种特性,它允许程序在运行状态中分析其他代码,例如类、方法、属性和参数等,并能动态地操作它们。反射机制为开发者提供了一种强大的手段来扩展语言的功能,使得在不知道对象类型的...

    PHP 反射(Reflection)使用实例

    主要介绍了PHP 反射(Reflection)使用实例,本文讲解了ReflectionClass、ReflectionExtension、 ReflectionFunction、ReflectionMethod、ReflectionObject、ReflectionParameter等类的使用实例,需要的朋友可以参考下

    php-reflection-code:PHP反射IDE自动提示生成器

    PHP反射代码 PHP反射IDE自动提示生成器 描述 本程序在命令行(CLI)中执行,通过PHP反射将内置类生成一个空实现定义,放在IDE任何位置实现代码提示功能。可用于没有提供PHP代码实现的PECL扩展(如:Redis)在IDE中的...

    php反射方法调用执行类中的私有方法.zip

    介绍一篇关于PHP通过反射方法调用执行类中的私有方法,希望这篇教程能够帮助到各位朋友,有兴趣的可以进来看看。具有完整的反射 API,添加了对类、接口、函数、方法和扩展进行反向工程的能力。

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

    PHP反射机制是一个强大的特性,它允许在运行时检查和操作类、方法、属性和参数等信息。这篇文章介绍了PHP反射的实际使用案例和反射API的中文说明。重点在于详细解释了PHP反射API中的每个方法,以帮助开发者更好地...

    PHP反射类ReflectionClass和ReflectionObject的使用方法

    PHP反射机制是PHP提供的一种强大的元编程能力,它允许程序在运行时检查并操作其他对象、类、方法和属性。这种机制对于理解代码结构、执行动态行为以及在某些情况下进行单元测试非常有用。本文将详细讲解`...

    PHP反射学习入门示例

    PHP反射是PHP语言中一种用于程序自我分析的机制。它允许程序在运行时对自身进行检查和操作,包括类、方法、属性、参数等。使用PHP反射,开发者可以获得关于类、方法和属性的元信息,这对于动态调用方法、访问私有或...

    php反射应用示例

    PHP反射是一种强大的功能,它允许我们在运行时检查和操作PHP类、对象、接口、方法和函数等。在PHP中,反射API(Reflection API)提供了一系列的类,让我们能够获取关于这些编程元素的详细信息,包括它们的属性、方法...

    php反射学习之依赖注入示例

    本示例虽然简单,但展示了PHP反射和依赖注入的实质应用,这对于编写高质量、可测试、可维护的PHP代码具有指导意义。希望本文的分析和代码示例能够帮助开发者更好地理解和应用PHP反射以及依赖注入技术。

Global site tag (gtag.js) - Google Analytics