PHP 常用的反射函数
1. get_class — 返回对象的类名string get_class ([ object $obj ] )
返回对象实例 obj 所属类的名字。如果 obj 不是一个对象则返回 FALSE。
Note: 在 PHP 扩展库中定义的类返回其原始定义的名字。在 PHP 4 中 get_class() 返回用户定义的类名的小写形式,但是在 PHP 5 中将返回类名定义时的名字,如同扩展库中的类名一样
view plaincopy
[*]//Note: 自 PHP 5 起,如果在对象的方法中调用则 obj 为可选项。
[*]
[*]//Example#1 使用 get_class()
[*]
[*]<?php
[*]
[*]class foo {
[*] function foo()
[*] {
[*] // implements some logic
[*] }
[*]
[*] function name()
[*] {
[*] echo "My name is " , get_class($this) , "/n";
[*] }
[*]}
[*]
[*]// create an object
[*]$bar = new foo();
[*]
[*]// external call
[*]echo "Its name is " , get_class($bar) , "/n";
[*]
[*]// internal call
[*]$bar->name();
[*]
[*]?>
上例将输出:
Its name is foo
My name is foo
2.get_class_methods — 返回由类的方法名组成的数组
说明
array get_class_methods ( mixed $class_name )
返回由 class_name 指定的类中定义的方法名所组成的数组。如果出错,则返回 NULL。
Example#1 get_class_methods() 示例
view plaincopy
[*]<?php
[*]class myclass
[*]{
[*]// constructor
[*]function myclass()
[*]{
[*] return(true);
[*]}
[*] // method 1
[*]function myfunc1()
[*]{
[*] return(true);
[*]}
[*]// method 2
[*]function myfunc2()
[*]{
[*] return(true);
[*]}
[*]}
[*]$class_methods = get_class_methods('myclass');
[*]
[*]$class_methods = get_class_methods(new myclass());
[*]
[*]foreach ($class_methods as $method_name) { echo "$method_name/n";
[*]}
[*]?>
上例将输出:
myclass
myfunc1
myfunc2
get_class_vars — 返回由类的默认属性组成的数组
说明
array get_class_vars ( string $class_name )
返回由类的默认公有属性组成的关联数组,此数组的元素以 varname => value 的形式存在。
view plaincopy
[*]<?php
[*]class myclass {
[*]var $var1; // 此变量没有默认值……
[*]var $var2 = "xyz";
[*]var $var3 = 100;
[*]private $var4; // PHP 5
[*]// constructor
[*]function myclass() {
[*]// change some properties
[*]$this->var1 = "foo";
[*]$this->var2 = "bar";
[*]return true;
[*]}
[*]}
[*]
[*]$my_class = new myclass();
[*]$class_vars = get_class_vars(get_class($my_class));
[*]foreach ($class_vars as $name => $value)
[*]{
[*]echo "$name : $value/n";
[*]}
[*]
[*]?>
上例输出:
// 在 PHP 4.2.0 之前
var2 : xyz
var3 : 100
// 从 PHP 4.2.0 开始
var1 :
var2 : xyz
var3 : 100
view plaincopy
[*]class Memd extends Memcached {
[*] /**
[*] * 获取Memcached内置属性与函数
[*] * @param int $flag default 1
[*] */
[*] public function getMemcachedVar($flag = 1) {
[*] $r = new ReflectionClass($this);
[*] switch($flag) {
[*] case 1:
[*] return $r->getConstants();
[*] case 2:
[*] return $r->getMethods();
[*] }
[*] }
[*]}
[*]
[*]$cls = new Memd();
[*]$info = $cls->getMemcachedVar(1);
[*]print_r($info);
①Reflection类
view plaincopy
[*]class Reflection
[*]{
[*]public static mixed export(Reflector r [,bool return])
[*]//导出一个类或方法的详细信息
[*]public static array getModifierNames(int modifiers)
[*]//取得修饰符的名字
[*]}
②ReflectionException类
该类继承标准类,没特殊方法和属性。
③ReflectionFunction类
view plaincopy
[*]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类:
view plaincopy
[*]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类:
view plaincopy
[*]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类:
view plaincopy
[*]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类:
view plaincopy
[*]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类
view plaincopy
[*]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()
[*]}
[*]__CLASS__ 获取当前类名(在此之前我用get_class - -!)
[*]__FUNCTION__ 当前函数名(confirm)
[*]__METHOD__ 当前方法名 (bankcard::confirm)
页:
[1]