This article mainly introduces PHP reflection (Reflection) usage examples. This article explains ReflectionClass, ReflectionExtension, ReflectionFunction, ReflectionMethod, ReflectionObject, ReflectionParameter For usage examples of other categories, friends who need it can refer to it
PHP Reflection is used to obtain detailed information of classes, extensions, methods, functions, objects, parameters, and properties.
The ReflectionClass class obtains class-related information, such as obtaining attributes, methods, document comments, etc.
?
|
<🎜> <🎜> <🎜>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; } } //Export class ReflectionClass::export('Person'); $r = new ReflectionClass('Person'); //Get all attributes print_r($r->getProperties()); /** * 获取指定属性 * ReflectionProperty::IS_STATIC * ReflectionProperty::IS_PUBLIC * ReflectionProperty::IS_PROTECTED * ReflectionProperty::IS_PRIVATE */ print_r($r->getProperties(ReflectionProperty::IS_PRIVATE)); //Get comments print_r($r->getProperty('id')->getDocComment()); //Getting method print_r($r->getMethods()); |
ReflectionExtension class is used to obtain extension related information
?
2 3
4 5
|
$re = new ReflectionExtension('Reflection'); print_r($re->getClasses()); //All extended classes print_r($re->getClassNames()); //Expand all class names $dom = new ReflectionExtension('mysql'); print_r($dom->getConstants());//Extended constants print_r($dom->getDependencies());//This extension depends on print_r($dom->getFunctions());//Extension method print_r($dom->getINIEntries());//Extended ini information print_r($dom->getName());//Extension name print_r($dom->getVersion());//Extended version print_r($dom->info());//Extended information print_r($dom->isPersistent());//Whether it is a persistent extension print_r($dom->isTemporary()); //Whether it is a temporary extension |
1 2 3 4 5 | $rf = new ReflectionFunction('array_merge'); foreach($rf->getParameters() as $item) { echo $item .PHP_EOL; } |
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 class is used to obtain object-related information
?
2 3
4 5
|
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()); |
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 |
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 { /**test*/ 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()); |