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