PHP如何列出类的所有公共函数

回答 4 浏览 2.9万 2012-07-20

我听说过get_class_methods(),但在PHP中是否有办法收集某个特定类的所有公共方法的数组?

Kristian 提问于2012-07-20
呃,get_class_methods($class) 一种收集某个特定类的所有公共方法的数组的方式......Berry Langerak 2012-07-20
如果你想使用get_class_methods只检索公共方法,它必须在类之外使用。Federkun 2012-07-20
get_class_methods($class)返回所有公开或没有关键词的方法。所以任何私有方法都不会被返回daslicht 2015-11-06
4 个回答
#1楼 已采纳
得票数 38

是的,你可以,看一下反射类/方法。

http://php.net/manual/en/book.reflection.phphttp://www.php.net/manual/en/reflectionclass.getmethods.php

$class = new ReflectionClass('Apple');
$methods = $class->getMethods(ReflectionMethod::IS_PUBLIC);
var_dump($methods);
Alex Barnes 提问于2012-07-20
我很喜欢使用静态方法而不是通过Reflectionmethod的实例化来实现的简单性。Kristian 2012-07-20
不是正确的解决方案。你也会得到静态函数。raiserle 2021-03-30
#2楼
得票数 21

由于get_class_methods()是对范围敏感的,你可以通过在类的范围之外调用函数来获得一个类的所有公共方法:

因此,参加这门课。

class Foo {
    private function bar() {
        var_dump(get_class_methods($this));
    }

    public function baz() {}

    public function __construct() {
        $this->bar();
    }
}

var_dump(get_class_methods('Foo')); 将输出以下内容:

array
  0 => string 'baz' (length=3)
  1 => string '__construct' (length=11)

虽然来自类 (new Foo;) 范围内的调用会返回:

array
  0 => string 'bar' (length=3)
  1 => string 'baz' (length=3)
  2 => string '__construct' (length=11)
Diego Agulló 提问于2012-07-20
#3楼
得票数 8

在获得所有带有get_class_methods($theClass)的方法后,你可以用类似这样的方法来循环浏览它们:

foreach ($methods as $method) {
    $reflect = new ReflectionMethod($theClass, $method);
    if ($reflect->isPublic()) {
    }
}
Adi 提问于2012-07-20
#4楼
得票数 1

你是否尝试过这种方式?

$class_methods = get_class_methods(new myclass());

foreach ($class_methods as $method_name) {
    echo "$method_name\n";
}
GBD 提问于2012-07-20
我认为Kristian是专门要求列出公共方法的。Stegrex 2012-07-20
标签