PHP Reflection是用于获取类、扩展、方法、函数、对象、参数、属性的详细信息。
ReflectionClass类获取类相关信息,如获取属性、方法、文档注释等。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
|
<?php class Person { /** * For the sake of demonstration, we"re setting this private */ private $_allowDynamicAttributes = false; /** type=primary_autoincrement */ protected $id = 0; /** type=varchar length=255 null */ protected $name ; /** type=text null */ protected $biography ; public function getId() { return $this ->id; } public function setId( $v ) { $this ->id = $v ; } public function getName() { return $this ->name; } public function setName( $v ) { $this ->name = $v ; } public function getBiography() { return $this ->biography; } public function setBiography( $v ) { $this ->biography = $v ; } } //导出类 ReflectionClass::export( 'Person' ); $r = new ReflectionClass( 'Person' ); //获取所有属性 print_r( $r ->getProperties()); /** * 获取指定属性 * ReflectionProperty::IS_STATIC * ReflectionProperty::IS_PUBLIC * ReflectionProperty::IS_PROTECTED * ReflectionProperty::IS_PRIVATE */ print_r( $r ->getProperties(ReflectionProperty::IS_PRIVATE)); //获取注释 print_r( $r ->getProperty( 'id' )->getDocComment()); //获取方法 print_r( $r ->getMethods()); |
ReflectionExtension 类用于获取扩展相关信息
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
$re = new ReflectionExtension( 'Reflection' ); print_r( $re ->getClasses()); //扩展的所有类 print_r( $re ->getClassNames()); //扩展所有类名 $dom = new ReflectionExtension( 'mysql' ); print_r( $dom ->getConstants()); //扩展常量 print_r( $dom ->getDependencies()); //该扩展依赖 print_r( $dom ->getFunctions()); //扩展方法 print_r( $dom ->getINIEntries()); //扩展ini信息 print_r( $dom ->getName()); //扩展名称 print_r( $dom ->getVersion()); //扩展版本 print_r( $dom ->info()); //扩展信息 print_r( $dom ->isPersistent()); //是否是持久扩展 print_r( $dom ->isTemporary()); //是否是临时扩展 |
ReflectionFunction类 用户获取函数相关信息
1
2
3
4
5
|
$rf = new ReflectionFunction( 'array_merge' ); foreach ( $rf ->getParameters() as $item ) { echo $item . PHP_EOL; } |
ReflectionMethod类用户获取方法相关信息
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
class Person { public $name ; /** * get name of person */ public function getName() { return $this ->name; } public function setName( $v ) { $this ->name = $v ; } } $rm = new ReflectionMethod( 'Person' , 'getName' ); print_r( $rm ->isPublic()); print_r( $rm ->getDocComment()); |
ReflectionObject 类 用于获取对象相关信息
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
class Person { public $name ; public function __construct( $name ) { $this ->name = $name ; } public function getName() { return $this ->name; } public function setName( $v ) { $this ->name = $v ; } } $a = new Person( 'a' ); $ro = new ReflectionObject( $a ); print_r( $ro ->getMethods()); |
ReflectionParameter 获取函数或方法参数的相关信息。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
class Person { public $name ; public function __construct( $name ) { $this ->name = $name ; } public function getName() { return $this ->name; } public function setName( $v ) { $this ->name = $v ; } } $p = new ReflectionParameter( array ( 'Person' , 'setName' ), 0); print_r( $p ->getPosition()); //0 print_r( $p ->getName()); //v |
ReflectionProperty 获取类的属性的相关信息。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
class Person { /** 测试 */ public $name ; public function __construct( $name ) { $this ->name = $name ; } public function getName() { return $this ->name; } public function setName( $v ) { $this ->name = $v ; } } $p = new ReflectionProperty( 'Person' , 'name' ); print_r( $p ->getDocComment()); |