在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
今天遇到了这样一个问题,如下代码: classA.php <?php class ClassA{ public function funcAa(){ } public function funcAb(){ } public function funcAc(){ } } ?>
classB.php <?php include './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 更多的知识请参考手册 |
2022-08-16
2022-09-04
2022-08-17
2022-08-12
2022-08-15
请发表评论