- 浏览: 345260 次
文章分类
最新评论
-
亚当爱上java:
"给pre-commit添加可执行权限:chmod ...
svn强制要求提交注释--pre-commit钩子 -
rosasyou:
不知道这篇文章是怎么才让人看的?估计不是浏览器兼容问题。 ,与 ...
Zend Framework的DB处理 -
jinjiankang:
$youngest=`svnlook youngest $sv ...
svn备份策略 -
wangxc:
你好,我按照你介绍的方法在创建完weekly_backup.p ...
svn备份策略 -
yangfuchao418:
...
关于memcached的浅见
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接口,
在这样的类层次结构中,若想实现多态是很容易的。
发表评论
-
图片压缩的一些心得
2010-11-03 11:45 2005http://blog.lizhigang.net/arc ... -
PHP程序员面临的成长瓶颈
2010-10-25 10:06 2018作为Web开发中应用最广泛的语言之一,PHP有着大量的粉丝 ... -
URL重写相关
2010-07-26 18:13 1212初级URL重写指南 http://lamp.lin ... -
关于PHP的mod_rewrite重写模块技术个人觉得最好的一篇文章
2010-07-26 09:30 2259最近手里一个PHP项目要用到mod_rewrite模块,很 ... -
PHP源代码分析- tick(s)
2010-07-24 10:13 1979By Altair, http://www.phpint ... -
php多线程编程
2010-07-21 23:52 1058http://www.cnblogs.com/niniwzw/ ... -
php pcntl_fork和pcntl_fork 的用法
2010-07-21 22:23 2148http://www.jb51.net/article/177 ... -
探讨高并发写入文件内容
2010-07-11 22:48 2827读写相关的问题是永远存在的,文件锁就是为了解决这个问题而做的, ... -
php中,高并发状态下文件的读写
2010-07-11 22:28 8783对于日IP不高或者说并发数不是很大的应用,一般不用考虑这些 ... -
HTTP POST from PHP, without cURL
2010-07-06 17:28 1623Update May 2010: This is one ... -
php fsockopen解决办法。
2010-07-06 15:07 3177Author:David | English Ver ... -
用 PHP V5 开发多任务应用程序
2010-07-04 00:39 1230http://www.ibm.com/developerw ... -
git使用总结
2010-07-02 23:51 1362http://zhwen.org/?p=articles/gi ... -
Linux消息队列原理与应用
2010-07-02 18:03 9514http://www.wanglong-neu.cn/ ... -
我说PHPer的水平区分(转载)
2010-07-02 10:55 1467说句实话,写这个真够无 ... -
正则表达式解题经验谈
2010-06-29 22:08 1093正则表达式解题经验谈 ... -
深入浅出之正则表达式
2010-06-28 21:14 800dragon.cnblogs.com/archive/2006 ... -
stream_set_blocking让程序无阻塞
2010-06-28 09:48 1383stream_set_blocking让程序 ... -
什么是Socket?Socket协议的形象描述
2010-06-28 00:11 1585socket的英文原义是“ ... -
完善匹配中文的Php正则表达式
2010-06-11 16:15 2296这段时间试图使用php正 ...
相关推荐
本文将深入探讨PHP反射的工作原理,并通过一个简单的例子来说明其用法。 1. PHP反射基础 反射API是PHP内建的一组类,它提供了对类、接口、函数、方法和常量等对象的元数据访问。这些类包括`\ReflectionClass`、`\...
### PHP反射API详解 #### 一、概述 **PHP反射API**是一种强大的工具,它允许开发者在运行时分析和操作程序中的类、方法、属性、参数等元素。反射API不仅能够帮助开发者深入了解程序结构,还能在某些场景下实现动态...
详细介绍了php如何利用反射机制调用类的函数,包括调用静态函数和非静态函数用法的区别
### PHP反射机制详解 #### 一、PHP反射机制概述 PHP反射机制是PHP的一个核心功能之一,它允许程序运行时动态地获取类、接口、函数等的信息,并且能够调用这些对象的功能。通过PHP反射机制,开发人员可以更加灵活地...
基于php+tp5.0采用php反射处理RBAC权限管理.zip 始的目录结构如下: www WEB部署目录(或者子目录) ├─application 应用目录 │ ├─common 公共模块目录(可以更改) │ ├─admin 后台模块 │ │ ├─config....
PHP反射API提供了丰富的功能,包括创建类的实例、查看类的方法和属性、检查类的元数据以及动态调用方法。本文将深入探讨PHP反射的原理、用法以及其在实际开发中的应用场景。 ### 反射原理 反射的基本原理是通过...
PHP反射机制是面向对象编程中的一种特性,它允许程序在运行状态中分析其他代码,例如类、方法、属性和参数等,并能动态地操作它们。反射机制为开发者提供了一种强大的手段来扩展语言的功能,使得在不知道对象类型的...
主要介绍了PHP 反射(Reflection)使用实例,本文讲解了ReflectionClass、ReflectionExtension、 ReflectionFunction、ReflectionMethod、ReflectionObject、ReflectionParameter等类的使用实例,需要的朋友可以参考下
PHP反射代码 PHP反射IDE自动提示生成器 描述 本程序在命令行(CLI)中执行,通过PHP反射将内置类生成一个空实现定义,放在IDE任何位置实现代码提示功能。可用于没有提供PHP代码实现的PECL扩展(如:Redis)在IDE中的...
介绍一篇关于PHP通过反射方法调用执行类中的私有方法,希望这篇教程能够帮助到各位朋友,有兴趣的可以进来看看。具有完整的反射 API,添加了对类、接口、函数、方法和扩展进行反向工程的能力。
PHP反射机制是PHP提供的一种强大的元编程能力,它允许程序在运行时检查并操作其他对象、类、方法和属性。这种机制对于理解代码结构、执行动态行为以及在某些情况下进行单元测试非常有用。本文将详细讲解`...
PHP反射机制是一个强大的特性,它允许在运行时检查和操作类、方法、属性和参数等信息。这篇文章介绍了PHP反射的实际使用案例和反射API的中文说明。重点在于详细解释了PHP反射API中的每个方法,以帮助开发者更好地...
PHP反射是PHP语言中一种用于程序自我分析的机制。它允许程序在运行时对自身进行检查和操作,包括类、方法、属性、参数等。使用PHP反射,开发者可以获得关于类、方法和属性的元信息,这对于动态调用方法、访问私有或...
PHP反射是一种强大的功能,它允许我们在运行时检查和操作PHP类、对象、接口、方法和函数等。在PHP中,反射API(Reflection API)提供了一系列的类,让我们能够获取关于这些编程元素的详细信息,包括它们的属性、方法...
本示例虽然简单,但展示了PHP反射和依赖注入的实质应用,这对于编写高质量、可测试、可维护的PHP代码具有指导意义。希望本文的分析和代码示例能够帮助开发者更好地理解和应用PHP反射以及依赖注入技术。