>  기사  >  백엔드 개발  >  PHP 反射(Reflection)使用实例_PHP教程

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

WBOY
WBOY원래의
2016-07-13 09:53:44852검색

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...
성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.