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