PHP5添加了一项新的功能:Reflection。这个功能使得phper可以reverse-engineer class, interface,function,method and extension。通过PHP代码,就可以得到某object的所有信息,并且可以和它交互。
反射是什么?
它是指在PHP运行状态中,扩展分析PHP程序,导出或提取出关于类、方法、属性、参数等的详细信息,包括注释。这种动态获取的信息以及动态调用对象的方
法的功能称为反射API。反射是操纵面向对象范型中元模型的API,其功能十分强大,可帮助我们构建复杂,可扩展的应用。
其用途如:自动加载插件,自动生成文档,甚至可用来扩充PHP语言。
php反射api由若干类组成,可帮助我们用来访问程序的元数据或者同相关的注释交互。借助反射我们可以获取诸如类实现了那些方法,创建一个类的实例(不同于用new创建),调用一个方法(也不同于常规调用),传递参数,动态调用类的静态方法。
反射api是php内建的oop技术扩展,包括一些类,异常和接口,综合使用他们可用来帮助我们分析其它类,接口,方法,属性,方法和扩展。这些oop扩展被称为反射。
thinkphp框架App.class.php文件里的exec中有用到PHP反射。
具体包含的类和实例可参照手册:函数参考》变量与类型相关扩展》反射:
- Reflection — Reflection 类
- Reflection::export — Exports
- Reflection::getModifierNames — 获取修饰符的名称
- ReflectionClass — ReflectionClass 类
- ReflectionClass::__construct — 构造一个 ReflectionClass 类
- ReflectionClass::export — 导出一个类
- ReflectionClass::getConstant — 获取定义过的一个常量
- ReflectionClass::getConstants — 获取一组常量
- ReflectionClass::getConstructor — 获取类的构造函数
- ReflectionClass::getDefaultProperties — 获取默认属性
- ReflectionClass::getDocComment — 获取文档注释
- ReflectionClass::getEndLine — 获取最后一行的行数
- ReflectionClass::getExtension — 根据已定义的类获取所在扩展的 ReflectionExtension 对象
- ReflectionClass::getExtensionName — 获取定义的类所在的扩展的名称
- ReflectionClass::getFileName — 获取定义类的文件名
- ReflectionClass::getInterfaceNames — 获取接口(interface)名称
- ReflectionClass::getInterfaces — 获取接口
- ReflectionClass::getMethod — 获取一个类方法的 ReflectionMethod。
- ReflectionClass::getMethods — 获取方法的数组
- ReflectionClass::getModifiers — 获取修饰符
- ReflectionClass::getName — 获取类名
- ReflectionClass::getNamespaceName — 获取命名空间的名称
- ReflectionClass::getParentClass — 获取父类
- ReflectionClass::getProperties — 获取一组属性
- ReflectionClass::getProperty — 获取类的一个属性的 ReflectionProperty
- ReflectionClass::getShortName — 获取短名
- ReflectionClass::getStartLine — 获取起始行号
- ReflectionClass::getStaticProperties — 获取静态(static)属性
- ReflectionClass::getStaticPropertyValue — 获取静态(static)属性的值
- ReflectionClass::getTraitAliases — 返回 trait 别名的一个数组
- ReflectionClass::getTraitNames — 返回这个类所使用 traits 的名称的数组
- ReflectionClass::getTraits — 返回这个类所使用的 traits 数组
- ReflectionClass::hasConstant — 检查常量是否已经定义
- ReflectionClass::hasMethod — 检查方法是否已定义
- ReflectionClass::hasProperty — 检查属性是否已定义
- ReflectionClass::implementsInterface — 接口的实现
- ReflectionClass::inNamespace — 检查是否位于命名空间中
- ReflectionClass::isAbstract — 检查类是否是抽象类(abstract)
- ReflectionClass::isCloneable — 返回了一个类是否可复制
- ReflectionClass::isFinal — 检查类是否声明为 final
- ReflectionClass::isInstance — 检查类的实例
- ReflectionClass::isInstantiable — 检查类是否可实例化
- ReflectionClass::isInterface — 检查类是否是一个接口(interface)
- ReflectionClass::isInternal — 检查类是否由扩展或核心在内部定义
- ReflectionClass::isIterateable — 检查是否可迭代(iterateable)
- ReflectionClass::isSubclassOf — 检查是否为一个子类
- ReflectionClass::isTrait — 返回了是否为一个 trait
- ReflectionClass::isUserDefined — 检查是否由用户定义的
- ReflectionClass::newInstance — 从指定的参数创建一个新的类实例
- ReflectionClass::newInstanceArgs — 从给出的参数创建一个新的类实例。
- ReflectionClass::newInstanceWithoutConstructor — 创建一个新的类实例而不调用它的构造函数
- ReflectionClass::setStaticPropertyValue — 设置静态属性的值
- ReflectionClass::__toString — 返回 ReflectionClass 对象字符串的表示形式。
- ReflectionZendExtension — ReflectionZendExtension 类
- ReflectionZendExtension::__clone — Clone handler
- ReflectionZendExtension::__construct — Constructor
- ReflectionZendExtension::export — Export
- ReflectionZendExtension::getAuthor — Gets author
- ReflectionZendExtension::getCopyright — Gets copyright
- ReflectionZendExtension::getName — Gets name
- ReflectionZendExtension::getURL — Gets URL
- ReflectionZendExtension::getVersion — Gets version
- ReflectionZendExtension::__toString — To string handler
- ReflectionExtension — ReflectionExtension 类
- ReflectionExtension::__clone — Clones
- ReflectionExtension::__construct — Constructs a ReflectionExtension
- ReflectionExtension::export — Export
- ReflectionExtension::getClasses — Gets classes
- ReflectionExtension::getClassNames — Gets class names
- ReflectionExtension::getConstants — Gets constants
- ReflectionExtension::getDependencies — Gets dependencies
- ReflectionExtension::getFunctions — Gets extension functions
- ReflectionExtension::getINIEntries — Gets extension ini entries
- ReflectionExtension::getName — Gets extension name
- ReflectionExtension::getVersion — Gets extension version
- ReflectionExtension::info — Print extension info
- ReflectionExtension::isPersistent — Returns whether this extension is persistent
- ReflectionExtension::isTemporary — Returns whether this extension is temporary
- ReflectionExtension::__toString — To string
- ReflectionFunction — ReflectionFunction 类
- ReflectionFunction::__construct — Constructs a ReflectionFunction object
- ReflectionFunction::export — Exports function
- ReflectionFunction::getClosure — Returns a dynamically created closure for the function
- ReflectionFunction::invoke — Invokes function
- ReflectionFunction::invokeArgs — Invokes function args
- ReflectionFunction::isDisabled — Checks if function is disabled
- ReflectionFunction::__toString — To string
- ReflectionFunctionAbstract — ReflectionFunctionAbstract 类
- ReflectionFunctionAbstract::__clone — 复制函数
- ReflectionFunctionAbstract::getClosureScopeClass — Returns the scope associated to the closure
- ReflectionFunctionAbstract::getClosureThis — 返回本身的匿名函数
- ReflectionFunctionAbstract::getDocComment — 获取注释内容
- ReflectionFunctionAbstract::getEndLine — 获取结束行号
- ReflectionFunctionAbstract::getExtension — 获取扩展信息
- ReflectionFunctionAbstract::getExtensionName — 获取扩展名称
- ReflectionFunctionAbstract::getFileName — 获取文件名称
- ReflectionFunctionAbstract::getName — 获取函数名称
- ReflectionFunctionAbstract::getNamespaceName — 获取命名空间
- ReflectionFunctionAbstract::getNumberOfParameters — 获取参数数目
- ReflectionFunctionAbstract::getNumberOfRequiredParameters — 获取必须输入参数个数
- ReflectionFunctionAbstract::getParameters — 获取参数
- ReflectionFunctionAbstract::getShortName — 获取函数短名称
- ReflectionFunctionAbstract::getStartLine — 获取开始行号
- ReflectionFunctionAbstract::getStaticVariables — 获取静态变量
- ReflectionFunctionAbstract::inNamespace — 检查是否处于命名空间
- ReflectionFunctionAbstract::isClosure — 检查是否是匿名函数
- ReflectionFunctionAbstract::isDeprecated — 检查是否已经弃用
- ReflectionFunctionAbstract::isGenerator — 判断函数是否是一个生成器函数
- ReflectionFunctionAbstract::isInternal — 判断函数是否是内置函数
- ReflectionFunctionAbstract::isUserDefined — 检查是否是用户定义
- ReflectionFunctionAbstract::returnsReference — 检查是否返回参考信息
- ReflectionFunctionAbstract::__toString — 字符串化
- ReflectionMethod — ReflectionMethod 类
- ReflectionMethod::__construct — ReflectionMethod 的构造函数
- ReflectionMethod::export — 输出一个回调方法
- ReflectionMethod::getClosure — 返回一个动态建立的方法调用接口,译者注:可以使用这个返回值直接调用非公开方法。
- ReflectionMethod::getDeclaringClass — 获取反射函数调用参数的类表达
- ReflectionMethod::getModifiers — 获取方法的修饰符
- ReflectionMethod::getPrototype — 返回方法原型 (如果存在)
- ReflectionMethod::invoke — Invoke
- ReflectionMethod::invokeArgs — 带参数执行
- ReflectionMethod::isAbstract — 判断方法是否是抽象方法
- ReflectionMethod::isConstructor — 判断方法是否是构造方法
- ReflectionMethod::isDestructor — 判断方法是否是析构方法
- ReflectionMethod::isFinal — 判断方法是否定义 final
- ReflectionMethod::isPrivate — 判断方法是否是私有方法
- ReflectionMethod::isProtected — 判断方法是否是保护方法 (protected)
- ReflectionMethod::isPublic — 判断方法是否是公开方法
- ReflectionMethod::isStatic — 判断方法是否是静态方法
- ReflectionMethod::setAccessible — 设置方法是否访问
- ReflectionMethod::__toString — 返回反射方法对象的字符串表达
- ReflectionObject — ReflectionObject 类
- ReflectionObject::__construct — Constructs a ReflectionObject
- ReflectionObject::export — Export
- ReflectionParameter — ReflectionParameter 类
- ReflectionParameter::allowsNull — Checks if null is allowed
- ReflectionParameter::canBePassedByValue — Returns whether this parameter can be passed by value
- ReflectionParameter::__clone — Clone
- ReflectionParameter::__construct — Construct
- ReflectionParameter::export — Exports
- ReflectionParameter::getClass — Get the type hinted class
- ReflectionParameter::getDeclaringClass — Gets declaring class
- ReflectionParameter::getDeclaringFunction — Gets declaring function
- ReflectionParameter::getDefaultValue — Gets default parameter value
- ReflectionParameter::getDefaultValueConstantName — Returns the default value's constant name if default value is constant or null
- ReflectionParameter::getName — Gets parameter name
- ReflectionParameter::getPosition — Gets parameter position
- ReflectionParameter::isArray — Checks if parameter expects an array
- ReflectionParameter::isCallable — Returns whether parameter MUST be callable
- ReflectionParameter::isDefaultValueAvailable — Checks if a default value is available
- ReflectionParameter::isDefaultValueConstant — Returns whether the default value of this parameter is constant
- ReflectionParameter::isOptional — Checks if optional
- ReflectionParameter::isPassedByReference — Checks if passed by reference
- ReflectionParameter::__toString — To string
- ReflectionProperty — ReflectionProperty 类
- ReflectionProperty::__clone — Clone
- ReflectionProperty::__construct — Construct a ReflectionProperty object
- ReflectionProperty::export — Export
- ReflectionProperty::getDeclaringClass — Gets declaring class
- ReflectionProperty::getDocComment — Gets doc comment
- ReflectionProperty::getModifiers — Gets modifiers
- ReflectionProperty::getName — Gets property name
- ReflectionProperty::getValue — Gets value
- ReflectionProperty::isDefault — Checks if default value
- ReflectionProperty::isPrivate — Checks if property is private
- ReflectionProperty::isProtected — Checks if property is protected
- ReflectionProperty::isPublic — Checks if property is public
- ReflectionProperty::isStatic — Checks if property is static
- ReflectionProperty::setAccessible — Set property accessibility
- ReflectionProperty::setValue — Set property value
- ReflectionProperty::__toString — To string
- Reflector — Reflector 接口
- Reflector::export — Exports
- Reflector::__toString — 转化成字符串
- ReflectionException — ReflectionException 类