ReflectionClass::getMethods

(PHP 5, PHP 7, PHP 8)

ReflectionClass::getMethodsGets an array of methods

Description

public ReflectionClass::getMethods(?int $filter = null): array

Gets an array of methods for the class.

Parameters

filter

Filter the results to include only methods with certain attributes. Defaults to no filtering.

Any bitwise disjunction of ReflectionMethod::IS_STATIC, ReflectionMethod::IS_PUBLIC, ReflectionMethod::IS_PROTECTED, ReflectionMethod::IS_PRIVATE, ReflectionMethod::IS_ABSTRACT, ReflectionMethod::IS_FINAL, so that all methods with any of the given attributes will be returned.

Note: Note that other bitwise operations, for instance ~ will not work as expected. In other words, it is not possible to retrieve all non-static methods, for example.

Return Values

An array of ReflectionMethod objects reflecting each method.

Changelog

Version Description
7.2.0 filter is nullable now.

Examples

Example #1 Basic usage of ReflectionClass::getMethods()

<?php
class Apple {
public function
firstMethod() { }
final protected function
secondMethod() { }
private static function
thirdMethod() { }
}

$class = new ReflectionClass('Apple');
$methods = $class->getMethods();
var_dump($methods);
?>

The above example will output:

array(3) {
  [0]=>
  object(ReflectionMethod)#2 (2) {
    ["name"]=>
    string(11) "firstMethod"
    ["class"]=>
    string(5) "Apple"
  }
  [1]=>
  object(ReflectionMethod)#3 (2) {
    ["name"]=>
    string(12) "secondMethod"
    ["class"]=>
    string(5) "Apple"
  }
  [2]=>
  object(ReflectionMethod)#4 (2) {
    ["name"]=>
    string(11) "thirdMethod"
    ["class"]=>
    string(5) "Apple"
  }
}

Example #2 Filtering results from ReflectionClass::getMethods()

<?php
class Apple {
public function
firstMethod() { }
final protected function
secondMethod() { }
private static function
thirdMethod() { }
}

$class = new ReflectionClass('Apple');
$methods = $class->getMethods(ReflectionMethod::IS_STATIC | ReflectionMethod::IS_FINAL);
var_dump($methods);
?>

The above example will output:

array(2) {
  [0]=>
  object(ReflectionMethod)#2 (2) {
    ["name"]=>
    string(12) "secondMethod"
    ["class"]=>
    string(5) "Apple"
  }
  [1]=>
  object(ReflectionMethod)#3 (2) {
    ["name"]=>
    string(11) "thirdMethod"
    ["class"]=>
    string(5) "Apple"
  }
}

See Also

add a note

User Contributed Notes 3 notes

up
5
x_atrix at yahoo dot com
12 years ago
Note, for ReflectionClass::getMethods() not all methods in a final class are final, just the ones that have explicit modifier.If you want to use an and operator for the filter, here is a simple implementation<?phpfinal class Apple {    public function publicMethod() { }    public final function publicFinalMethod() { }    protected final function protectedFinalMethod() { }    private static function privateStaticMethod() { }}class MyReflection extends ReflectionClass {    public function __construct($argument) {        parent::__construct($argument);    }        /**     * (non-PHPdoc)     * @see ReflectionClass::getMethods()     */    public function getMethods($filter = null, $useAndOperator = true) {        if ($useAndOperator !== true) {            return parent::getMethods($filter);        }                $methods = parent::getMethods($filter);        $results = array();                foreach ($methods as $method) {            if (($method->getModifiers() & $filter) === $filter) {                $results[] = $method;            }        }                return $results;    }}$class = new MyReflection('Apple');$methods = $class->getMethods(ReflectionMethod::IS_FINAL | ReflectionMethod::IS_PUBLIC);var_dump($methods);$methods = $class->getMethods(ReflectionMethod::IS_FINAL | ReflectionMethod::IS_PUBLIC, false);var_dump($methods);?>Result:array(1) {  [0]=>  object(ReflectionMethod)#4 (2) {    ["name"]=>    string(17) "publicFinalMethod"    ["class"]=>    string(5) "Apple"  }}array(3) {  [0]=>  &object(ReflectionMethod)#5 (2) {    ["name"]=>    string(12) "publicMethod"    ["class"]=>    string(5) "Apple"  }  [1]=>  &object(ReflectionMethod)#3 (2) {    ["name"]=>    string(17) "publicFinalMethod"    ["class"]=>    string(5) "Apple"  }  [2]=>  &object(ReflectionMethod)#6 (2) {    ["name"]=>    string(20) "protectedFinalMethod"    ["class"]=>    string(5) "Apple"  }}
up
5
tom at r dot je
11 years ago
ReflectionClass::getMethods() sorts the methods by class (lowest in the inheritance tree first) then by the order they are defined in the class definition:<?phpclass A {    public function method1() {            }        public function method2() {            }}class B extends A {    public function method3() {    }    public function method4() {    }}$class = new ReflectionClass('B');print_r($class->getMethods());?>This will output:Array(    [0] => ReflectionMethod Object        (            [name] => method3            [class] => B        )    [1] => ReflectionMethod Object        (            [name] => method4            [class] => B        )    [2] => ReflectionMethod Object        (            [name] => method1            [class] => A        )    [3] => ReflectionMethod Object        (            [name] => method2            [class] => A        ))
up
1
deminy at deminy dot net
14 years ago
Method ReflectionClass::getMethods doesn't work constantly across different versions of PHP. For following code piece<?phpclass Dummy implements Iterator{    public function current () {}    public function next () {}    public function key () {}    public function valid () {}    public function rewind () {}}$reflection = new ReflectionClass('Dummy');$aMethods = $reflection->getMethods();echo '# of methods: ', count($aMethods), "\n";?>, it outputs "# of methods: 10" on PHP 5.2.14 and PHP 5.2.17, including all methods defined in the class itself and in the interface no matter if a method has been implemented or overridden; however, it returns "# of methods: 5" on PHP 5.3.5. Based on some other tests did by my colleagues, I assume it also returns "# of methods: 5" on PHP 5.2.10 and PHP 5.3.6.
To Top