I've heard of get_class_methods() but is there a way in PHP to gather an array of all of the public methods from a particular class?
4 Answers
Yes you can, take a look at the reflection classes / methods.
http://php.net/manual/en/book.reflection.php and http://www.php.net/manual/en/reflectionclass.getmethods.php
$class = new ReflectionClass('Apple');
$methods = $class->getMethods(ReflectionMethod::IS_PUBLIC);
var_dump($methods);
As get_class_methods() is scope-sensitive, you can get all the public methods of a class just by calling the function from outside the class' scope:
So, take this class:
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')); will output the following:
array
0 => string 'baz' (length=3)
1 => string '__construct' (length=11)
While a call from inside the scope of the class (new Foo;) would return:
array
0 => string 'bar' (length=3)
1 => string 'baz' (length=3)
2 => string '__construct' (length=11)
Comments
After getting all the methods with get_class_methods($theClass) you can loop through them with something like this:
foreach ($methods as $method) {
$reflect = new ReflectionMethod($theClass, $method);
if ($reflect->isPublic()) {
}
}
1 Comment
array_filter(get_class_methods($this), function($v) { return (new ReflectionMethod($this, $v))->isPublic(); });Have you try this way?
$class_methods = get_class_methods(new myclass());
foreach ($class_methods as $method_name) {
echo "$method_name\n";
}
get_class_methods($class)is a way to gather an array of all public methods of a particular class...get_class_methodsto retrieve ONLY public methods, it must used outside class..