当前位置:Gxlcms > PHP教程 > PHP反射(Reflection)使用实例_PHP教程

PHP反射(Reflection)使用实例_PHP教程

时间:2021-07-01 10:21:17 帮助过:4人阅读

PHP 反射(Reflection)使用实例


  这篇文章主要介绍了PHP 反射(Reflection)使用实例,本文讲解了ReflectionClass、ReflectionExtension、 ReflectionFunction、ReflectionMethod、ReflectionObject、ReflectionParameter等类的使用实例,需要的朋友可以参考下

  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

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

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/1000099.htmlTechArticlePHP 反射(Reflection)使用实例 这篇文章主要介绍了PHP 反射(Reflection)使用实例,本文讲解了ReflectionClass、ReflectionExtension、 ReflectionFunction、Reflec...

人气教程排行