ReflectionClass::getMethods

(PHP 5)

ReflectionClass::getMethodsВозвращает список методов в виде массива

Описание

public array ReflectionClass::getMethods ([ string $filter ] )

Возвращает список методов в виде массива.

Список параметров

filter

Фильтрация результата для включения в список только методов с определенными атрибутами. По умолчанию, фильтров нет.

Любая комбинация из следующих констант: ReflectionMethod::IS_STATIC, ReflectionMethod::IS_PUBLIC, ReflectionMethod::IS_PROTECTED, ReflectionMethod::IS_PRIVATE, ReflectionMethod::IS_ABSTRACT, ReflectionMethod::IS_FINAL.

Возвращаемые значения

Массив (array) объектов класса ReflectionMethod, отражающих каждый метод.

Примеры

Пример #1 Пример использования 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);
?>

Результат выполнения данного примера:

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

Пример #2 Пример фильтрации результата вызова 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);
?>

Результат выполнения данного примера:

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

Смотрите также

Коментарии

Method ReflectionClass::getMethods doesn't work constantly across different versions of PHP. For following code piece

<?php
class 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.
2011-06-22 12:24:03
http://php5.kiev.ua/manual/ru/reflectionclass.getmethods.html
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
<?php
final 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_PUBLICfalse);
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"
  }
}
2013-07-10 08:00:20
http://php5.kiev.ua/manual/ru/reflectionclass.getmethods.html
Автор:
ReflectionClass::getMethods() sorts the methods by class (lowest in the inheritance tree first) then by the order they are defined in the class definition:

<?php
class {
    public function 
method1() {
       
    }
   
    public function 
method2() {
       
    }
}

class 
extends {

    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
        )

)
2014-06-11 20:40:07
http://php5.kiev.ua/manual/ru/reflectionclass.getmethods.html

    Поддержать сайт на родительском проекте КГБ