加入收藏 | 设为首页 | 会员中心 | 我要投稿 云计算网_泰州站长网 (http://www.0523zz.com/)- 视觉智能、AI应用、CDN、行业物联网、智能数字人!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

PHP - ReflectorClass 反射类的影响

发布时间:2021-12-15 11:46:51 所属栏目:PHP教程 来源:互联网
导读:之前,我对一个新的缓存封装包写单元测试的时候(该包扩展了Memcached API),我遇到了重写Memcached::get()方法的问题。查看了 PHP文档的Memcached::get()方法,有三个参数必须添加到我的扩展签名,当我添加后,却一直得到 should be compatible with that

之前,我对一个新的缓存封装包写单元测试的时候(该包扩展了Memcached API),我遇到了重写Memcached::get()方法的问题。查看了 PHP文档的Memcached::get()方法,有三个参数必须添加到我的扩展签名,当我添加后,却一直得到“… should be compatible with that of Memcached::get()”的错误提示。我尝试着查找这个方法的签名源代码,但是从 PECL文档中没有找到任何有用的东西。于是,我使用PHP的 RelectionClass,看是否能找出哪里丢失了扩展签名从而引起了上述错误。几分钟后,我得出下面的代码片断:
 
1 $this->cache = Cache::factory(Cache::TYPE_VOLATILE);
2    
3 $reflector = new ReflectionClass(get_class($this->cache));
4    
5 foreach ($reflector->getMethod('get')->getParameters() as $param) {
6     var_dump((string) $param);
7 }
它输出如下:
 
1 string(32) "Parameter #0 [ <required> $key ]"
2 string(37) "Parameter #1 [ <optional> $cache_cb ]"
3 string(39) "Parameter #2 [ <optional> &$cas_token ]"
几秒后,调查输出结果,我发现我没有通过引用传递第三个参数($cas_token),但是在我确定我的版本之前,我仔细检查了PHP文档的Memcached::get(),事实发现$cas_token确实被引用传递过去了(通过&符号)。然后,我修改了我的扩展方法,第三个参数通过引用传递,一切又如预期的那样。
 
当你需要确定一个API的时候,却没有相关的文档,可以尝试使用PHP的ReflectorClass来得到相关信息。

(编辑:云计算网_泰州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读