PHP具有完整的反射API,可以对类、接口、函数、方法和扩展进行反向工程。反射API并提供方法取出函数、类和方法中的文档注释。本文将介绍使用PHP反射API获取类信息的方法,提供完整演示代码。
php反射api文档地址:http://php.net/manual/zh/class.reflectionclass.php
使用ReflectionClass获取类的属性,接口,方法等信息
1.获取类基本信息
$ref = new ReflectionClass($classname);echo $ref->getName();echo $ref->getFileName();
2.获取类属性信息
$ref = new ReflectionClass($classname);$properties = $ref->getProperties();foreach($properties as $property){ echo $property->getName();
}3.获取类方法信息
$ref = new ReflectionClass($classname);$methods = $ref->getMethods();foreach($methods as $method){ echo $method->getName();
}4.获取类接口信息
$ref = new ReflectionClass($classname);$interfaces = $ref->getInterfaces();foreach($interfaces as $interface){ echo $interface->getName();
}演示代码
创建IUser接口,User类,Vip类用于被读取
User.class.php
user[] = $data;
$keys = array_keys($this->user); return end($keys);
} /**
* 读取用户数据
* @param Int $id 用户id
* @return Array
*/
public function get($id){ if(isset($this->user[$id])){ return $this->user[$id];
}else{ return array();
}
}
}/** VIP用户类 */class Vip extends User{ /**
* 读取vip用户数据
* @param Int $id 用户id
* @return Array
*/
public function getvip($id){
$data = $this->get($id); if($data){ return $this->format($data);
} return $data;
} /**
* 修饰数据
* @param Array $data 用户数据
* @return Array
*/
private function format($data){
$data['is_vip'] = 1; return $data;
}
}
?>创建Ref类调用PHP反射类获取类信息
Ref.class.php
BASE INFO'.PHP_EOL; echo 'class name: '.self::$refclass->getName().PHP_EOL; echo 'class path: '.dirname(self::$refclass->getFileName()).PHP_EOL; echo 'class filename: '.basename(self::$refclass->getFileName()).PHP_EOL.PHP_EOL;
} // 读取类接口
public static function getInterfaces(){
echo 'INTERFACES INFO'.PHP_EOL; $interfaces = self::$refclass->getInterfaces(); if($interfaces){ foreach($interfaces as $interface){ echo 'interface name: '.$interface->getName().PHP_EOL;
}
}
} // 读取类属性
public static function getProperties(){
echo 'PROPERTIES INFO'.PHP_EOL; $properties = self::$refclass->getProperties(); if($properties){ foreach($properties as $property){ echo 'property name: '.$property->getName().PHP_EOL; echo 'property modifier: '.self::getModifier($property).PHP_EOL; echo 'property comments: '.self::formatComment($property->getDocComment()).PHP_EOL.PHP_EOL;
}
}
} // 读取类方法
public static function getMethods(){
echo 'METHODS INFO'.PHP_EOL; $methods = self::$refclass->getMethods(); if($methods){ foreach($methods as $method){ echo 'method name: '.$method->getName().PHP_EOL; echo 'method modifier: '.self::getModifier($method).PHP_EOL; echo 'method params num: '.$method->getNumberOfParameters().PHP_EOL; $params = $method->getParameters(); if($params){ foreach($params as $param){ echo 'param name:'.$param->getName().PHP_EOL;
}
} echo 'method comments: '.self::formatComment($method->getDocComment()).PHP_EOL.PHP_EOL;
}
}
} // 获取修饰符
private static function getModifier($o){
// public
if($o->isPublic()){ return 'public';
} // protected
if($o->isProtected()){ return 'protected';
} // private
if($o->isPrivate()){ return 'private';
} return '';
} // 格式化注释内容
private static function formatComment($comment){
$doc = explode(PHP_EOL, $comment); return isset($doc[1])? trim(str_replace('*','',$doc[1])) : '';
}
}?>demo:
';
Ref::setClass('Vip');
Ref::getBase();
Ref::getProperties();
Ref::getMethods();
Ref::getInterfaces();
echo '';?>输出:
BASE INFOclass name: Vipclass path: /home/fdipzone/refclass filename: User.class.php PROPERTIES INFOproperty name: userproperty modifier: protectedproperty comments: 用户数据 METHODS INFOmethod name: getvipmethod modifier: publicmethod params num: 1param name:idmethod comments: 读取vip用户数据method name: formatmethod modifier: privatemethod params num: 1param name:datamethod comments: 修饰数据method name: addmethod modifier: publicmethod params num: 1param name:datamethod comments: 新增用户method name: getmethod modifier: publicmethod params num: 1param name:idmethod comments: 读取用户数据 INTERFACES INFOinterface name: IUser
本篇文章讲解了如何利用php 来反射API获取类信息 ,更多相关内容请关注php中文网。
相关推荐:
立即学习“PHP免费学习笔记(深入)”;
由于疫情等原因大家都开始习惯了通过互联网上租车服务的信息多方面,且获取方式简便,不管是婚庆用车、旅游租车、还是短租等租车业务。越来越多租车企业都开始主动把租车业务推向给潜在需求客户,所以如何设计一个租车网站,以便在同行中脱颖而出就重要了,易优cms针对租车行业市场需求、目标客户、盈利模式等,进行策划、设计、制作,建设一个符合用户与搜索引擎需求的租车网站源码。 网站首页










