ReflectionClass
在线手册:中文  英文

ReflectionClass::getMethods

(PHP 5)

ReflectionClass::getMethods获取方法的数组

说明

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

获取类的方法的一个数组。

参数

filter

过滤结果为仅包含某些属性的方法。默认不过滤。

ReflectionMethod::IS_STATICReflectionMethod::IS_PUBLICReflectionMethod::IS_PROTECTEDReflectionMethod::IS_PRIVATEReflectionMethod::IS_ABSTRACTReflectionMethod::IS_FINAL 的任意组合。

返回值

包含每个方法 ReflectionMethod 对象的数组

范例

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

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

参见


ReflectionClass
在线手册:中文  英文

用户评论:

erik at dubbelboer dot com (2012-03-28 17:21:37)

The $filter uses an OR to filter the methods.
So php ReflectionMethod::IS_STATIC | ReflectionMethod::IS_PUBLIC will return all methods which are static or public methods, NOT only the methods which are both static and private.

deminy at deminy dot net (2011-06-22 09:24:03)

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.

calibhaan at gmail dot com (2010-05-11 09:57:46)

This method return an array of ReflectionMethod;
For example:

<?php
$reflection 
= new ReflectionClass('Test');
$aMethods $reflection->getMethods();
var_dump($aMethods);
?>

Display:
array(2) { 
 [0]=> &object(ReflectionMethod)#7 (2) { 
  ["name"]=> string(11) "__construct" 
  ["class"]=> string(9) "Test" } 
 [1]=> &object(ReflectionMethod)#8 (2) { 
  ["name"]=> string(3) "run" 
  ["class"]=> string(9) "Test" } 
}

易百教程