如何通过在父类中调用get_class_methods来获取子进程的私有方法

时间:2015-04-24 08:50:47

标签: php oop

我想知道是否有办法实现这个目标:

<?php 
    class Foo
    {
        public function getMethods()
        {
            $methods = get_class_methods($this);
            print_r($methods);
        }
    }

    class Bar extends Foo
    {
        private function privateFunction() {}   // Not visible for parent::getMethods()
    }

    $Bar = new Bar();
    $Bar->getMethods();
?>

有一个父类Foo,其中我有一个方法调用get_class_methods($ this)-Function。我总是通过几个不同的Bar-Class来扩展Foo-Class。我的问题是,我无法看到私有方法privateFunction()。

我的目标是,看看Bar的所有方法,但我不想重新创建getMethods() - 每个子类中的方法。

那么有没有办法让它们在父类中,或者我是否必须覆盖每个子类中的getMethods() - Method?

1 个答案:

答案 0 :(得分:3)

您可能需要使用Reflection来实现此目标

class Foo {
    public function getMethods() {
        $class = new ReflectionClass($this);
        $methods = $class->getMethods(
            ReflectionMethod::IS_PUBLIC | 
            ReflectionMethod::IS_PROTECTED | 
            ReflectionMethod::IS_PRIVATE
        );
        print_r($methods);
    }
}

class Bar extends Foo {
    public function privateFunction() {}
}

$Bar = new Bar();
$Bar->getMethods();

Demo