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

最近在开发过程中需要获取某个类方法的参数数量、名称及参数顺序,好根据参数的名称来从$_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() 

?> 

时间: 2024-09-09 13:44:27

PHP反射使用实例和PHP反射API的中文说明_php实例的相关文章

浅谈使用 PHP 进行手机 APP 开发(API 接口开发)_php实例

一.先简单回答两个问题: 1.PHP 可以开发客户端? 答:可以,因为PHP是脚本语言,是负责完成 B/S架构 或 C/S架构 的S部分,即:主要用于服务端的开发.但是,PHP可不仅仅只能在互联网站上发展,一个PHP for Android(PFA)站点表示他们将可以发布编程模型.工具盒文档让PHP在Android上实现应用.该项目的主要赞助商是开源公司IronTec,PFA使用Scripting Layer for Android (SL4A),也就是Androd Scripting Envi

Yii2框架制作RESTful风格的API快速入门教程_php实例

先给大家说下什么是REST restful REST全称是Representational State Transfer,中文意思是表述(编者注:通常译为表征)性状态转移. 它首次出现在2000年Roy Fielding的博士论文中,Roy Fielding是HTTP规范的主要编写者之一. 他在论文中提到:"我这篇文章的写作目的,就是想在符合架构原理的前提下,理解和评估以网络为基础的应用软件的架构设计,得到一个功能强.性能好.适宜通信的架构.REST指的是一组架构约束条件和原则." 如

百度实时推送api接口应用示例_php实例

网站质量不错的网站可以在百度站长平台/数据提交/sitemap栏目下看到实时推送的功能, 目前这个工具是邀请开放, 百度的实时推送的api接口可以实时推送我们新发布的文章, 保证百度在第一时间收录.   百度站长平台 http://zhanzhang.baidu.com/ 打开百度站长平台, 点开实时推送的添加新数据接口获得带token的api推送地址:     http://ping.baidu.com/sitemap?site=www.yourdomain.com&resource_name

PHP 飞信好友免费短信API接口开源版_php实例

1,支持群发 (如果需要群发多号用英文逗号(,)分隔(159..,159..)) 2,支持POST或GET方式提交数据 本站接口: http://api.heqee.com/fetion/?username=飞信手机号码&passowrd=飞信手机密码&to=接收人号码&message=短信内容 或者 http://api.heqee.com/fetion/?u=飞信手机号码&p=飞信手机密码&t=接收人号码&m=短信内容 您也可以下载源码放在自己的网站上

PHP实现手机归属地查询API接口实现代码_php实例

复制代码 代码如下: <?php header("Content-Type:text/html;charset=utf-8″); if (isset($_GET['number'])) { $url = 'http://webservice.webxml.com.cn/WebServices/MobileCodeWS.asmx/getMobileCodeInfo'; $number = $_GET['number']; $ch = curl_init(); curl_setopt($ch,

有道搜索和IP138的IP的API接口(PHP应用)_php实例

复制代码 代码如下: <?php $myip = $_SERVER["REMOTE_ADDR"]; //ip138 http://wap.ip138.com/ip.asp?ip=www.myolnet.com //youdao http://www.youdao.com/smartresult-xml/search.s?type=ip&q=ip $ipinfo=fcontents("http://www.youdao.com/smartresult-xml/se

使用Discuz关键词服务器实现PHP中文分词_php实例

不同于使用自己的服务器进行分词,Discuz!在线中文分词服务是基于API返回分词结果的.在项目中,我们只需要一个函数即可方便地进行分词.关键词提取.以下是根据Discuz!在线分词服务API写的函数,测试可正常运行: 复制代码 代码如下: /** * DZ在线中文分词 * @param $title string 进行分词的标题 * @param $content string 进行分词的内容 * @param $encode string API返回的数据编码 * @return  arra

PHP常用编译参数中文说明_php实例

编译PHP常用的参数的解释 复制代码 代码如下: --prefix=/usr/local/php #指定 php 安装目录 --with-apxs2=/usr/local/apache/bin/apxs #整合apache,apxs功能是使用mod_so中的LoadModule指令,加载指定模块到 apache,要求 apache 要打开SO模块 --with-config-file-path=/usr/local/php/etc #用来指定 php3.ini 或 php4.ini 的路径 --

自编函数解决pathinfo()函数处理中文问题_php实例

今天写程序时遇到一个小问题,pathinfo在处理中文文件名时出现的问题,如果中文在字首就出现获取的filename为空,英文在字首后面是中文的则能获取到.如下图: 于是自己写了个函数代替,代码如下: 复制代码 代码如下: function path_info($filepath)   {       $path_parts = array();       $path_parts ['dirname'] = rtrim(substr($filepath, 0, strrpos($filepat