1. 云栖社区>
  2. PHP教程>
  3. 正文

PHP - ReflectorClass 反射类的作用

作者:用户 来源:互联网 时间:2017-12-01 13:11:09

php反射作用ReflectorClass

PHP - ReflectorClass 反射类的作用 - 摘要: 本文讲的是PHP - ReflectorClass 反射类的作用,     之前,我对一个新的缓存封装包写单元测试的时候(该包扩展了Memcached API),我遇到了重写Memcached::get()方法的问题。查看了PHP文档的Memcached::get()方法,有三个参数必须添加到我的扩展签名


 


 


之前,我对一个新的缓存封装包写单元测试的时候(该包扩展了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 [ $key ]"
string(37)"Parameter #1 [ $cache_cb ]"
string(39)"Parameter #2 [ &$cas_token ]"

 


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


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


 


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


 


 


 

以上是云栖社区小编为您精心准备的的内容,在云栖社区的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索php , 反射 , 作用 ReflectorClass ,以便于您获取更多的相关知识。