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

2015-01-24信息快讯网

这篇文章主要介绍了PHP反射使用实例和PHP反射API的中文说明,重点在对PHP的反射API中每个方法都做了中文说明,需要的朋友可以参考下

最近在开发过程中需要获取某个类方法的参数数量、名称及参数顺序,好根据参数的名称来从$_GET里取值。

如方法原型为test($uid,$score), 那么我就知道需要需要从$_GET取

$uid = $_GET['uid'];

$score = $_GET['score'];

然后调用方法$obj->test($uid,$score)

当然前提是约定好了参数名称和get方法传值变量名一致。

采用PHP的反射API,获得函数参数名称和参数默认值的方法如下:

<?php  
class testClass{  
      
    public function testFunc($param1,$param2=0){  
          
    }  
}  
  
$method = new ReflectionMethod('testClass', 'testFunc');  
$params = $method--->getParameters();  
foreach ($params as $param) {  
    echo 'param name: ' . $param->getName(),"\n";  
    if ($param->isOptional()) {  
        echo 'Default value: ' . $param->getDefaultValue(),"\n";  
    }  
}  

下面是PHP反射API的介绍:

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

php程序员应具有的7种能力小结
分享最受欢迎的5款PHP框架
PHP比你想象的好得多
简单说说PHP优化那些事(经验分享)
几个实用的PHP内置函数使用指南
thinkphp的URL路由规则与配置实例
thinkphp文件引用与分支结构用法实例
thinkphp模板的包含与渲染实例分析
thinkphp模板继承实例简述
thinkphp中空模板与空模块的用法实例
php调用新浪短链接API的方法
PHP类的反射用法实例
百度实时推送api接口应用示例
PHP反射机制用法实例
浅谈使用 PHP 进行手机 APP 开发(API 接口开发)
PHP中的reflection反射机制测试例子
PHP的反射类ReflectionClass、ReflectionMethod使用实例
实例介绍PHP的Reflection反射机制
改写ThinkPHP的U方法使其路由下分页正常
用PHP解决的一个栈的面试题
PHP中遇到BOM、<feff>编码导致json_decode函数无法解析问题
php foreach正序倒序输出示例代码
浅析ThinkPHP的模板输出功能
ThinkPHP中的系统常量和预定义常量集合
ThinkPHP快速入门实例教程之数据分页
PHPMailer发送HTML内容、带附件的邮件实例
PHP和javascript常用正则表达式及用法实例
PHP生成二维码的两个方法和实例
PHP中使用TCPDF生成PDF文档实例
PHP使用Alexa API获取网站的Alexa排名例子
百度地图API应用之获取用户的具体位置
利用谷歌 Translate API制作自己的翻译脚本
PhpDocumentor 2安装以及生成API文档的方法
php加速器eAccelerator的配置参数、API详解
php使用反射插入对象示例分享
php反射应用示例
©2014-2024 dbsqp.com