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