`
pengjun1128
  • 浏览: 16758 次
  • 性别: Icon_minigender_1
  • 来自: 河南
社区版块
存档分类
最新评论

PHP反射API

    博客分类:
  • php
阅读更多
反射是什么?
它是指在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()
//测试该类是否声明为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类:

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类:

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类

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()
}
分享到:
评论

相关推荐

    php反射api.pdf

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

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

    重点在于详细解释了PHP反射API中的每个方法,以帮助开发者更好地理解和应用PHP的反射机制。 首先,文章提到了在开发过程中,我们可能会遇到需要获取某个类方法的参数数量、名称以及参数顺序的情况。这时,PHP的反射...

    PHP反射API示例分享

    本文实例为大家分享了 PHP反射API–利用反射技术实现的插件系统架构,供大家参考,具体内容如下 <?php /** * @name PHP反射API--利用反射技术实现的插件系统架构 */ /** * 先调用findPlugins方法获取到获取到...

    PHP面向对象程序设计之类与反射API详解共5页.pdf

    反射API提供了一种动态获取和操作PHP代码结构的方式,这在编写元编程或复杂组件时非常有用。 类是面向对象的基础,它定义了一组属性(成员变量)和方法(成员函数)。在PHP中,你可以使用`class`关键字来声明一个类...

    up_195606_addendum_qrkoy.rar

    标签"php"确认了这个主题与PHP编程语言紧密相关,因此,我们接下来将深入探讨PHP反射API以及如何通过扩展来增强其功能。 PHP反射API是一个强大的工具,它允许程序员在运行时获取关于类、对象、接口、函数、方法等的...

    up_498859_addendum_edjb7a.rar

    总的来说,这个压缩包是一个学习和研究PHP反射API扩展的好资源,特别是对于那些希望深入理解PHP内部机制,或者需要自定义反射行为的开发者来说。通过探索和实践,可以提升对PHP高级特性的理解和应用能力。

    up_309356_addendum_b5d6r.rar

    "addendum"这个词在英语中通常指补充或附加内容,因此在这个上下文中,它可能是对PHP反射API的补充实现。 描述中提到,"addendum"是一个PHP源码实现,用于扩展PHP的反射API。PHP的反射API允许我们在运行时检查类、...

    up_960493_addendum_oia39.rar

    总结来说,这个压缩包提供的"addendum"源码是对PHP反射API的增强,通过它我们可以学习到如何扩展PHP内置功能,掌握更高级的编程技巧。同时,包含的示例代码和可能的文档将帮助我们更好地理解和应用这个扩展库,...

    up_290154_addendum_zdwb1.rar

    对于那些对PHP反射API有深入研究需求的开发者,以及那些在编写高度模块化和动态代码时遇到挑战的项目团队,“addendum”都将是一个宝贵的资源。它不仅扩展了语言本身的功能,也提升了整个PHP生态系统的健康度和进步...

    up_183970_addendum_neuhg.rar

    通过深入研究这个扩展,你将能增强对PHP反射API的理解,学习到如何利用反射进行高级编程,以及如何扩展PHP的内置功能。这将对你的PHP开发技能有显著提升,尤其是在处理动态代码生成、元编程任务以及优化性能等方面。...

    BetterReflection基于AST的反射库允许分析操作代码

    传统的 PHP 反射API虽然提供了这些功能,但在某些复杂的代码分析任务中可能显得力不从心。`Roave/BetterReflection` 是一个更加强大且灵活的反射库,它基于抽象语法树(Abstract Syntax Tree,简称 AST),为开发者...

    up_1126481_addendum_5x2ith.rar

    "5x2ith"可能是版本号或者是作者的标识。 ..."addendum"提供了单行和多行调用方式,意味着它可能提供了更灵活的接口,使得开发者可以根据需求...对于想要深入学习PHP反射API或扩展开发的程序员来说,这是一个宝贵的资源。

    filereflection:使用缺少的 ReflectionFile 类补充 PHP 反射 API

    思维游戏/文件反射 这个库通过缺少的 ReflectionFile 类补充了 PHP 。 其他一些库已经可以做到这一点,但是这个库实现了我能找到的其他实现中缺少的一个重要功能:根据解析本地类型名称。 界面非常简单: ...

    up_986408_addendum_240cr.rar

    "addendum"在描述中被提及,它是一个扩展PHP反射API的PHP源码实现。这个工具可能提供了一些额外的功能或者优化,使得开发者能够更有效地理解和操作PHP代码。 描述中提到,`addendum`是为PHP开发者设计的,它支持...

    up_522456_addendum_w5gni.rar

    总之,"addendum"是一个旨在增强PHP反射功能的扩展,通过研究其源码,开发者能够提升自己在PHP反射API方面的技能,了解如何利用反射进行更高级的编程实践。"407c1850643d44ca3a456fa4f1863c01.txt"和"fileinfo.txt...

    up_233116_addendum_ekqsw.rar

    总之,"up_233116_addendum_ekqsw.rar" 提供了一个学习和实践PHP扩展开发的机会,通过分析和使用 "addendum",开发者可以增强对PHP反射API的理解,同时提升自身的编程技能。无论是初学者还是有经验的开发者,都有...

Global site tag (gtag.js) - Google Analytics