ReflectionClass::getMethods

(PHP 5, PHP 7, PHP 8)

ReflectionClass::getMethodsGets an array of methods

Descrizione

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

Gets an array of methods for the class.

Elenco dei parametri

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.

Nota: 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.

Valori restituiti

An array of ReflectionMethod objects reflecting each method.

Log delle modifiche

Versione Descrizione
7.2.0 filter is nullable now.

Esempi

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);
?>

Il precedente esempio visualizzerà:

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);
?>

Il precedente esempio visualizzerà:

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"
  }
}

Vedere anche:

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