PHP如何列出类的所有公共函数
回答 4
浏览 2.9万
2012-07-20
我听说过get_class_methods()
,但在PHP中是否有办法收集某个特定类的所有公共方法的数组?
呃,
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.php和http://www.php.net/manual/en/reflectionclass.getmethods.php
$class = new ReflectionClass('Apple');
$methods = $class->getMethods(ReflectionMethod::IS_PUBLIC);
var_dump($methods);
我很喜欢使用静态方法而不是通过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)
#3楼
得票数 8
在获得所有带有get_class_methods($theClass)
的方法后,你可以用类似这样的方法来循环浏览它们:
foreach ($methods as $method) {
$reflect = new ReflectionMethod($theClass, $method);
if ($reflect->isPublic()) {
}
}
#4楼
得票数 1
你是否尝试过这种方式?
$class_methods = get_class_methods(new myclass());
foreach ($class_methods as $method_name) {
echo "$method_name\n";
}
我认为Kristian是专门要求列出公共方法的。
- Stegrex 2012-07-20