Я слышал о get_class_methods()
, но есть ли способ в PHP собрать массив всех общедоступных методов из определенного класса?
PHP, как перечислять все публичные функции класса
Ответ 1
Да, вы можете взглянуть на классы/методы отражения.
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);
Ответ 2
Поскольку get_class_methods()
зависит от области видимости, вы можете получить все общедоступные методы класса, просто вызвав функцию извне класса 'scope:
Итак, возьмите этот класс:
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
После получения всех методов с помощью get_class_methods($theClass)
вы можете пропустить их через что-то вроде этого:
foreach ($methods as $method) {
$reflect = new ReflectionMethod($theClass, $method);
if ($reflect->isPublic()) {
}
}
Ответ 4
Вы пробовали этот путь?
$class_methods = get_class_methods(new myclass());
foreach ($class_methods as $method_name) {
echo "$method_name\n";
}