为了账号安全,请及时绑定邮箱和手机立即绑定

php反射获取勒种的所有方法, 如何排除父类的方法

php反射获取勒种的所有方法, 如何排除父类的方法

PHP
慕容708150 2019-03-15 10:14:25
反射获取类中的方法的时候, 发现结果中包含了父类中的所有方法, 如何排除父类的方法?
查看完整描述

3 回答

?
侃侃无极

TA贡献2051条经验 获得超10个赞

用ReflectionMethod::getDeclaringClass 和本类做比较.

查看完整回答
反对 回复 2019-03-18
?
紫衣仙女

TA贡献1839条经验 获得超15个赞

ReflectionClass::getParentClass
ReflectionClass::getMethods

先获取子类的 methods,在获取 父类的 methods,你就可以过滤了。

查看完整回答
反对 回复 2019-03-18
?
慕哥6287543

TA贡献1831条经验 获得超10个赞

如果你的父类的方法修饰符用的跟子类都不一样的话可以使用filter参数去过滤
例如:ReflectionMethod::IS_STATIC
要是父类方法跟子类方法的修饰都一样的话那只能手动过滤一下了

下边是给出的过滤方式:

<?php
class A {
    public function method1() {
        
    }
    
    public function method2() {
        
    }
}

class B extends A {

    public function method3() {

    }

    public function method4() {

    }
}

//需要反射的变量类名
$class_name = 'B';
$class = new ReflectionClass($class_name);
$methods = $class->getMethods();

//获取到之后批量循环一下好了
foreach ($methods as $key => $val) {
    if ($class_name != $val->class) {
        unset($methods[$key]);
    }
}
print_r($methods);
?>
查看完整回答
反对 回复 2019-03-18
  • 3 回答
  • 0 关注
  • 975 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信