`
liuxin-smallmouse
  • 浏览: 19160 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

PHP - ReflectorClass 反射类的作用

    博客分类:
  • PHP
阅读更多

 

 

之前,我对一个新的缓存封装包写单元测试的时候(该包扩展了Memcached API),我遇到了重写Memcached::get()方法的问题。查看了 PHP文档 的 Memcached::get()方法,有三个参数必须添加到我的扩展签名,当我添加后,却一直得到“… should be compatible with that of Memcached::get()”的错误提示。我尝试着查找这个方法的签名源代码,但是从 PECL文档 中没有找到任何有用的东西。于是,我使用PHP的 RelectionClass ,看是否能找出哪里丢失了扩展签名从而引起了上述错误。几分钟后,我得出下面的代码片断:

 

$this->cache = Cache::factory(Cache::TYPE_VOLATILE);
 
$reflector = new ReflectionClass(get_class($this->cache));
 
foreach ($reflector->getMethod('get')->getParameters() as $param) {
    var_dump((string) $param);
}

 

它输出如下:

 

string(32) "Parameter #0 [ <required> $key ]"
string(37) "Parameter #1 [ <optional> $cache_cb ]"
string(39) "Parameter #2 [ <optional> &$cas_token ]"

 

几秒后,调查输出结果,我发现我没有通过引用传递第三个参数($cas_token),但是在我确定我的版本之前,我仔细检查了PHP文档的 Memcached::get(),事实发现$cas_token确实被引用传递过去了(通过&符号)。然后,我修改了我的扩展方法,第三个参数 通过引用传递,一切又如预期的那样。

当你需要确定一个API的时候,却没有相关的文档,可以尝试使用PHP的ReflectorClass来得到相关信息。

 

转载:http://www.oschina.net/question/157182_60568

 

 

 

分享到:
评论

相关推荐

    PHP实现依赖注入-使用反射机制和动态代理技术

    由于每次写php程序的时候都要引入其他的php文件,这个让我很是头痛, 所以就模仿java中的spring的动态注入功能, 写了这么一段代码。这段代码我测试过还比较好用吧。 不过我认为还是用很多不合理的地方,和一些...

    php-qq登陆类.zip

    php-qq登陆类,类已封装,用于QQ登陆的callback页面。 实例化类时传入3个参数 app_id,app_key,callback,qq接入流程需要自己去QQ互联文档上了解,此类只做回调功能封装。 请求URL地址,得到返回字符串...

    PHP反射类ReflectionClass和ReflectionObject的使用方法

    - PHP的反射类ReflectionClass、ReflectionMethod使用实例 - PHP反射机制原理与用法详解 - PHP反射使用实例和PHP反射API的中文说明 - 基于反射获取一个类中所有的方法 - PHP 反射机制实现动态代理的代码 - PHP...

    php 反射简单例子

    反射API是PHP内建的一组类,它提供了对类、接口、函数、方法和常量等对象的元数据访问。这些类包括`\ReflectionClass`、`\ReflectionFunction`、`\ReflectionMethod`等,它们分别用于获取关于类、函数和方法的信息。...

    简单的php-mysql操作类.zip

    介绍一个简单的php-mysql操作类,数据库连接和设置,执行操作,显示信息,取得数据集的某个值,取得数据集的某个值,取得数据集的行数,循环读取数据,最后一次插入纪录的id值,插入任意数据,修改数据,删除数据,...

    php-google-translate-free, PHP类用于免费使用谷歌翻译 API.zip

    php-google-translate-free, PHP类用于免费使用谷歌翻译 API PHP GoogleTranslate免费 简单的PHP库,用于免费地翻译谷歌 API 。安装通过 Composer 安装这个软件包。composer require statickidz/php-google-tran

    php-java-bridge_7.2.1_documentation.zip

    PHP-Java-Bridge(简称PJB)就是这样一个解决方案,它提供了一个高效的接口,使得PHP能够无缝调用Java类和方法。本文将详细解析PHP-Java-Bridge 7.2.1版本的相关知识,以及如何在项目中集成和使用。 一、...

    php-5.4.7.tar.gz

    3. **配置PHP-FPM**:启用FastCGI进程管理器,编辑 `/etc/php/php-fpm.conf` 和 `/etc/php/fpm/pool.d/www.conf`,设置监听端口和用户组等。 4. **启动服务**:`sudo /usr/local/php/sbin/php-fpm`,并添加到开机...

    php反射api.pdf

    - **`Reflector`**:接口,所有反射类都实现了这个接口。 - **`ReflectionException`**:异常类,当反射操作失败时抛出。 - **`ReflectionFunction`**:用于反射函数的类。 - **`ReflectionParameter`**:用于反射...

    计算机后端-PHP基础到高级开发教程-53 PHP代码 作用复用 移植 .mp4

    计算机后端-PHP基础到高级开发教程-53 PHP代码 作用复用 移植 .mp4

    php-RAS加密类代码.zip

    介绍一个php-RAS加密类代码,签名及密文编码:base64字符串/十六进制字符串/二进制字符串流,填充方式: PKCS1Padding(加解密)/NOPadding(解密),如密钥长度为1024 bit,则加密时数据需小于128字节,加上PKCS1...

    php-mysql操作类程序.zip

    介绍一个不错的PHP mysql操作类,SQL执行后的数据保存变量,读取一条数据并把数据往后移一位,如果数据为空则返回为null,更新数据库里面的数据,$t为表名,$v格式为数组格式,上标为字段名,下标为数据;$w为条件上标...

    php-mysql封装类实例.zip

    主要介绍了php mysql 封装类实例代码,数据库连接,数据库执行语句,可执行查询添加修改删除等任何sql语句,调试中使用,sql语句出错时会自动打印出来,将系统数据库与用户数据库分开,更直观的显示。

    PHP反射介绍

    #### 二、反射类与接口介绍 1. **`Reflection`类**:提供了一组静态方法用于输出和获取修饰符名称等基本操作。 - `public static mixed export(Reflector $reflector[, bool $return = false])`:用于导出反射对象...

    计算机后端-PHP基础到高级开发教程-54 PHP类与对象(数.mp4

    计算机后端-PHP基础到高级开发教程-53 PHP代码 作用复用 移植 .mp4

    PHP经典实例--类和对象

    总结起来,"PHP经典实例--类和对象"涵盖了从基本的类定义到高级特性,如魔术方法、解构器、访问控制和反射的全面内容。通过理解和实践这些概念,开发者能够更好地驾驭PHP的面向对象编程,写出更富有表现力、易于维护...

    php-5.5.38-Win32-VC11-x64

    标题 "php-5.5.38-Win32-VC11-x64" 提供的信息表明,这是PHP的一个特定版本,适用于Windows操作系统,基于Visual C++ 11编译器构建,并且是为64位(x64)架构优化的。PHP是一种广泛使用的开源服务器端脚本语言,特别...

    PHP基础到高级开发教程-57 PHP类与对象封装.mp4

    PHP基础到高级开发教程-57 PHP类与对象封装.mp4

    PHP-PDO数据库操作类

    **PHP-PDO数据库操作类详解** PDO(PHP Data Objects)是PHP中用于数据库访问的扩展,它提供了一种数据访问接口,支持多种数据库系统。PHP-PDO数据库操作类是基于PDO扩展开发的,旨在简化数据库操作,提高代码的...

    php-4.3.2-Win32中文版编程工具

    1. **下载安装**:首先,从官方或者可靠的第三方源获取php-4.3.2-Win32的压缩包,解压到本地目录。 2. **配置PHP**:找到php.ini-dist文件,根据实际需求进行配置,如设置默认时区、修改上传文件大小限制等。配置...

Global site tag (gtag.js) - Google Analytics