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