18

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

4

4 回答 4

34

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

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);
于 2012-07-20T08:40:44.820 回答
19

由于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)
于 2012-07-20T08:44:06.427 回答
8

获得所有方法后,get_class_methods($theClass)您可以通过以下方式循环它们:

foreach ($methods as $method) {
    $reflect = new ReflectionMethod($theClass, $method);
    if ($reflect->isPublic()) {
    }
}
于 2012-07-20T08:40:57.823 回答
1

你有没有尝试过这种方式?

$class_methods = get_class_methods(new myclass());

foreach ($class_methods as $method_name) {
    echo "$method_name\n";
}
于 2012-07-20T08:38:48.553 回答