PHP 反射(Reflection)使用实例
PHPReflection是用于获取类、扩展、方法、函数、对象、参数、属性的详细信息。
ReflectionClass类获取类相关信息,如获取属性、方法、文档注释等。
<?php classPerson{ /** *Forthesakeofdemonstration,we"resettingthisprivate */ private$_allowDynamicAttributes=false; /**type=primary_autoincrement*/ protected$id=0; /**type=varcharlength=255null*/ protected$name; /**type=textnull*/ protected$biography; publicfunctiongetId() { return$this->id; } publicfunctionsetId($v) { $this->id=$v; } publicfunctiongetName() { return$this->name; } publicfunctionsetName($v) { $this->name=$v; } publicfunctiongetBiography() { return$this->biography; } publicfunctionsetBiography($v) { $this->biography=$v; } } //导出类 ReflectionClass::export('Person'); $r=newReflectionClass('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类用于获取扩展相关信息
$re=newReflectionExtension('Reflection'); print_r($re->getClasses());//扩展的所有类 print_r($re->getClassNames());//扩展所有类名 $dom=newReflectionExtension('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类用户获取函数相关信息
$rf=newReflectionFunction('array_merge'); foreach($rf->getParameters()as$item){ echo$item.PHP_EOL; }
ReflectionMethod类用户获取方法相关信息
classPerson{ public$name; /** *getnameofperson */ publicfunctiongetName() { return$this->name; } publicfunctionsetName($v) { $this->name=$v; } } $rm=newReflectionMethod('Person','getName'); print_r($rm->isPublic()); print_r($rm->getDocComment());
ReflectionObject类用于获取对象相关信息
classPerson{ public$name; publicfunction__construct($name) { $this->name=$name; } publicfunctiongetName() { return$this->name; } publicfunctionsetName($v) { $this->name=$v; } } $a=newPerson('a'); $ro=newReflectionObject($a); print_r($ro->getMethods());
ReflectionParameter获取函数或方法参数的相关信息。
classPerson{ public$name; publicfunction__construct($name) { $this->name=$name; } publicfunctiongetName() { return$this->name; } publicfunctionsetName($v) { $this->name=$v; } } $p=newReflectionParameter(array('Person','setName'),0); print_r($p->getPosition());//0 print_r($p->getName());//v
ReflectionProperty获取类的属性的相关信息。
classPerson{ /**测试*/ public$name; publicfunction__construct($name) { $this->name=$name; } publicfunctiongetName() { return$this->name; } publicfunctionsetName($v) { $this->name=$v; } } $p=newReflectionProperty('Person','name'); print_r($p->getDocComment());