PHP 反射 ReflectionClass

王朝学院·作者佚名  2016-05-25
窄屏简体版  字體: 小  |  中  |  大  |  超大  

php 反射 ReflectionClass今天遇到了这样一个问题,如下代码:

classA.php

<?phpclass ClassA{public function funcAa(){}public function funcAb(){}public function funcAc(){}}?>

classB.php

<?phpinclude './classA.php';class ClassB extends ClassA{public function funcBa(){}public function funcBb(){}public function funcBc(){}public function funcAa(){parent::funcAa();}}$classB = new ClassB;$classFuncB = get_class_methods($classB);echo '<PRe>';print_r($classFuncB);?>

当我需要找出ClassB里面的所有方法的时候结果如下:

Array( [0] => funcBa [1] => funcBb [2] => funcBc [3] => funcAa [4] => funcAb [5] => funcAc)

一共6个方法,实际上我不想要继承了ClassA里面的方法,我只想要ClassB的方法,怎么办呢?我稍微更改了如下:

$classA = new ClassA;$classB = new ClassB;$classFuncA = get_class_methods($classA);$classFuncB = get_class_methods($classB);echo '<pre>';print_r(array_diff($classFuncB,$classFuncA));

结果如下:

Array( [0] => funcBa [1] => funcBb [2] => funcBc)

少了一个方法 funcAa ,虽然funcAa是 ClassB 从 ClassA那里继承过来的,但是同样ClassB也有这个方法,所以不是我想要的结果。

解决方法:

$reflection = new ReflectionClass('ClassB');print_r($reflection->getMethods());

结果:

Array( [0] => ReflectionMethod Object ( [name] => funcBa [class] => ClassB ) [1] => ReflectionMethod Object ( [name] => funcBb [class] => ClassB ) [2] => ReflectionMethod Object ( [name] => funcBc [class] => ClassB ) [3] => ReflectionMethod Object ( [name] => funcAa [class] => ClassB ) [4] => ReflectionMethod Object ( [name] => funcAb [class] => ClassA ) [5] => ReflectionMethod Object ( [name] => funcAc [class] => ClassA ))

可以看到 [4]、[5] 里面的class 对应的值是ClassA,而其他对应的值都是ClassB。通过这个可以用foreach来实现最后想要的结果:

$reflection = new ReflectionClass('ClassB');$array = '';foreach($reflection->getMethods() as $obj){if($obj->class == $reflection->getName()){//$reflection->getName() 获取类名$array[] = $obj->name;}}echo '<pre>';print_r($array);

最后结果:

Array( [0] => funcBa [1] => funcBb [2] => funcBc [3] => funcAa)

完成,关于 ReflectionClass 更多的知识请参考手册

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝網路 版權所有 導航