`
liuxin-smallmouse
  • 浏览: 19003 次
  • 性别: 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-mysql工具类

    这里我们讨论的"php-mysql工具类"就是一种为了简化PHP与MySQL交互而设计的代码模块。这个工具类采用了设计模式中的单例模式来确保在整个应用程序中只有一个数据库连接实例,从而优化资源使用并避免并发问题。 首先...

    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-google-translate-free, PHP类用于免费使用谷歌翻译 API.zip

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

    简单的php-mysql操作类.zip

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

    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基础到高级开发教程-54 PHP类与对象(数.mp4

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

    PHP反射介绍

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

    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扩展开发的,旨在简化数据库操作,提高代码的...

Global site tag (gtag.js) - Google Analytics