PHP 反射类学习记录
原文:http://www.upwqy.com/details/58.html
1 开发环境
windows
TP5
参考文档
http://php.net/manual/zh/class.reflectionclass.php
2 准备工作
新建一个测试反射类 TestReflection.php
<?php
/**
* User: [一秋]
* Date: 2017-11-23
* Time: 16:29
* Desc: 成功来源于点滴
*/ namespace app\api\controller\v3; class TestReflection
{
/**
* @title 首页
*/
public function index(){
echo 'index';
}
public function add(){
echo 'add';
} }
在新建 一个类 Test.php
3 测试
3.1 ReflectionClass::__construct — 初始化 ReflectionClass 类
public ReflectionClass::__construct ( mixed $argument
)
public function index(){
$method = new \ReflectionClass('app\api\controller\v3\TestReflection');
dump($method);
}
返回结果是
object(ReflectionClass)#12 (1) {
["name"] => string(26) "app\api\controller\v3\TestReflection"
}
3.2 ReflectionClass::export — 导出一个类
public static string ReflectionClass::export ( mixed $argument
[, bool $return
= false ] )
public function index(){
$method = new \ReflectionClass('ReflectionClass');
\Reflection::export($method); }
返回的结果是:
Class [ class app\api\controller\v3\TestReflection ] { @@ D:\phpStudy\WWW\mmks\application\api\controller\v3\TestReflection.php 12-21 - Constants [0] { } - Static properties [0] { } - Static methods [0] { } - Properties [0] { } - Methods [2] { Method [ public method index ] { @@ D:\phpStudy\WWW\mmks\application\api\controller\v3\TestReflection.php 14 - 16 } Method [ public method add ] { @@ D:\phpStudy\WWW\mmks\application\api\controller\v3\TestReflection.php 17 - 19 } } }
3.3 ReflectionClass::getConstant — 获取定义过的一个常量
public mixed ReflectionClass::getConstant ( string $name
)
获取定义过的一个常量。
在TestReflection 新增一个常量
<?php
/**
* User: [一秋]
* Date: 2017-11-23
* Time: 16:29
* Desc: 成功来源于点滴
*/
namespace app\api\controller\v3;
class TestReflection
{
const NAME = 'wang';
/**
* @title 首页
*/
public function index(){
echo 'index';
}
public function add(){
echo 'add';
} }
Test.php
<?php
/**
* User: [一秋]
* Date: 2017-11-23
* Time: 15:59
* Desc: 成功来源于点滴
*/ namespace app\api\controller\v3; class Test
{
public function index(){
$method = new \ReflectionClass('app\api\controller\v3\TestReflection');
//导出一个类
// \Reflection::export($method);
$name = $method->getConstant('NAME');
dump($name);
}
}
返回的结果是
string(4) "wang"
这里如果常量不存在 则返回false
3.4 ReflectionClass::getConstants — 获取一组常量
public array ReflectionClass::getConstants ( void )
这里的 getConstants 不要拼错了。比上一个方法多了一个 s
获取某个类的全部已定义的常量,不管可见性如何定义。
本函数还未编写文档,仅有参数列表。
<?php
/**
* User: [一秋]
* Date: 2017-11-23
* Time: 15:59
* Desc: 成功来源于点滴
*/ namespace app\api\controller\v3; class Test
{
public function index(){
$method = new \ReflectionClass('app\api\controller\v3\TestReflection');
//导出一个类
// \Reflection::export($method);
$name = $method->getConstants();
dump($name);
}
}
返回的结果是
array(1) {
["NAME"] => string(4) "wang"
}
3.5 ReflectionClass::getConstructor — 获取类的构造函数
public ReflectionMethod ReflectionClass::getConstructor ( void )
获取已反射的类的构造函数。
为了方便测试 这里映射自身
<?php
/**
* User: [一秋]
* Date: 2017-11-23
* Time: 15:59
* Desc: 成功来源于点滴
*/ namespace app\api\controller\v3; class Test
{
const NAME = 'wang';
public function __construct()
{
} public function index(){
$method = new \ReflectionClass(__CLASS__);
//导出一个类
// \Reflection::export($method);
$name = $method->getConstructor();
dump($name);
}
}
返回的结果是
object(ReflectionMethod)#13 (2) {
["name"] => string(11) "__construct"
["class"] => string(26) "app\api\controller\v3\Test"
}
3.6 ReflectionClass::getDefaultProperties — 获取默认属性
public array ReflectionClass::getDefaultProperties ( void )
获取类的默认属性(包括了继承的属性)。
参数
此函数没有参数。
返回值
默认属性的数组,其键是属性的名称,其值是属性的默认值或者在属性没有默认值时是 NULL
。 这个函数不区分静态和非静态属性,也不考虑可见性修饰符。
<?php
/**
* User: [一秋]
* Date: 2017-11-23
* Time: 15:59
* Desc: 成功来源于点滴
*/ namespace app\api\controller\v3; /**
* 反射测试类
* Class Test
* @package app\api\controller\v3
*/
class Test extends par
{
public $user = 'user';
private $name = 'name';
public static $tel = '12345678912';
public $pass; const NAME = 'wang'; /**
* 构造函数
* Test constructor.
*/
public function __construct()
{
} /**
* 测试入口
* @param int $id 没有id
*/
public function index(){
$method = new \ReflectionClass(__CLASS__);
$name = $method->getDefaultProperties();
dump($name);
}
}
class par{
protected $par = 'par';
}
返回的结果是
array(5) {
["tel"] => string(11) "12345678912"
["user"] => string(4) "user"
["name"] => string(4) "name"
["pass"] => NULL
["par"] => string(3) "par"
}
3.7 ReflectionClass::getDocComment — 获取文档注释
public string ReflectionClass::getDocComment ( void )
从一个类中获取文档注释。
Warning
本函数还未编写文档,仅有参数列表。
参数
此函数没有参数。
返回值
如果存在则返回文档注释,否则返回 FALSE
。
<?php
/**
* User: [一秋]
* Date: 2017-11-23
* Time: 15:59
* Desc: 成功来源于点滴
*/ namespace app\api\controller\v3; /**
* 反射测试类
* Class Test
* @package app\api\controller\v3
*/
class Test extends par
{
public $user = 'user';
private $name = 'name';
public static $tel = '12345678912';
public $pass; const NAME = 'wang'; /**
* 构造函数
* Test constructor.
*/
public function __construct()
{
} /**
* 测试入口
* @param int $id 没有id
*/
public function index(){
$method = new \ReflectionClass(__CLASS__);
$name = $method->getDocComment();
dump($name);
}
} /**
* Class par
* @package app\api\controller\v3
*/
class par{
protected $par = 'par';
}
返回结果是
string(78) "/**
* 反射测试类
* Class Test
* @package app\api\controller\v3
*/"
3.8 ReflectionClass::getEndLine — 获取最后一行的行数
public int ReflectionClass::getEndLine ( void )
从用户定义的类获取其最后一行的行数。
参数
此函数没有参数。
返回值
返回用户定义的类最后一行的行数,如果未知则返回 FALSE
。
/**
* 测试入口
* @param int $id 没有id
*/
public function index(){
$method = new \ReflectionClass(__CLASS__);
$name = $method->getEndLine();
dump($name);
}
返回结果是
int(39)
3.9 ReflectionClass::getExtension — 根据已定义的类获取所在扩展的 ReflectionExtension 对象
public ReflectionExtension ReflectionClass::getExtension ( void )
获取已定义类的扩展的 ReflectionExtension 对象。
参数
此函数没有参数。
返回值
类所处的扩展的 ReflectionExtension 对象的表示,如果是用户定义的类则返回 NULL
。
/**
* 测试入口
* @param int $id 没有id
*/
public function index(){
$method = new \ReflectionClass('Reflection');
$name = $method->getExtension();
dump($name);
}
返回的结果是
object(ReflectionExtension)#13 (1) {
["name"] => string(10) "Reflection"
}
3.10 ReflectionClass::getExtensionName — 获取定义的类所在的扩展的名称
说明
public string ReflectionClass::getExtensionName ( void )
获取定义的类所在的扩展的名称。
参数
此函数没有参数。
返回值
获取定义的类所在的扩展的名称,如果是用户定义的类,则返回 FALSE
。
public function index(){
$method = new \ReflectionClass('ReflectionClass');
$name = $method->getExtensionName();
dump($name);
}
返回的结果是
string(10) "Reflection"
PHP 反射类学习记录的更多相关文章
- Lua和C++交互 学习记录之九:在Lua中以面向对象的方式使用C++注册的类
主要内容转载自:子龙山人博客(强烈建议去子龙山人博客完全学习一遍) 部分内容查阅自:<Lua 5.3 参考手册>中文版 译者 云风 制作 Kavcc vs2013+lua-5.3.3 在 ...
- Lua和C++交互 学习记录之八:C++类注册为Lua模块
主要内容转载自:子龙山人博客(强烈建议去子龙山人博客完全学习一遍) 部分内容查阅自:<Lua 5.3 参考手册>中文版 译者 云风 制作 Kavcc vs2013+lua-5.3.3 1 ...
- MyBatis 学习记录3 MapperMethod类
主题 之前学习了一下MapperProxy的生产过程,自定义Mapper类的对象是通过动态代理生产的,调用自定义方法的时候实际上是调用了MapperMethod的execute方法:mapperMet ...
- Quartz 学习记录1
原因 公司有一些批量定时任务可能需要在夜间执行,用的是quartz和spring batch两个框架.quartz是个定时任务框架,spring batch是个批处理框架. 虽然我自己的小玩意儿平时不 ...
- Java设计模式学习记录-单例模式
前言 已经介绍和学习了两个创建型模式了,今天来学习一下另一个非常常见的创建型模式,单例模式. 单例模式也被称为单件模式(或单体模式),主要作用是控制某个类型的实例数量是一个,而且只有一个. 单例模式 ...
- Elasticsearch、XXLJob以及最近的学习记录
Elasticsearch.XXLJob以及最近的学习记录 前言 在这九月的最后一周,来总结一下最近的学习记录,主要是对于Elasticsearch.XXLjob的初步学习,想着还是多记录点,以便后面 ...
- Java 8 学习记录
Java 8 学习记录 官方文档 https://docs.oracle.com/javase/8/ https://docs.oracle.com/javase/8/docs/index.html ...
- Java 静态内部类与非静态内部类 学习记录.
目的 为什么会有这篇文章呢,是因为我在学习各种框架的时候发现很多框架都用到了这些内部类的小技巧,虽然我平时写代码的时候基本不用,但是看别人代码的话至少要了解基本知识吧,另外到底内部类应该应用在哪些场合 ...
- Apache Shiro 学习记录4
今天看了教程的第三章...是关于授权的......和以前一样.....自己也研究了下....我觉得看那篇教程怎么说呢.....总体上是为数不多的精品教程了吧....但是有些地方确实是讲的太少了.... ...
随机推荐
- levmar ndk 编译
levmar是一个强大的和高效率的C/C++库,采用Levenberg - 马奎德(LM)优化算法, 主要是为了解决非线性最小二乘问题.官网是:http://users.ics.forth. ...
- IE兼容swiper
swiper3能完美运用在移动端,但是运用在PC端,特别是IE浏览器上不能兼容,没有效果,要使IE兼容Swiper的话必须使用swiper2,也就是idangerous.swiper.js, 下载地址 ...
- bzoj2151 种树 双向链表+堆
2151: 种树 Time Limit: 10 Sec Memory Limit: 259 MBSubmit: 1151 Solved: 613[Submit][Status][Discuss] ...
- spring-boot-starter家族成员简介
应用程序starters 以下应用程序starters是Spring Boot在org.springframework.boot组下提供的: springboot使用指南https://docs.sp ...
- POJ1639 - Picnic Planning
原题链接 Description 给出一张个点的无向边权图并钦定点,求使得点的度不超过的最小生成树. Solution 首先无视掉与相连的所有边,原图会变成若干互不连通的个块.对每个块分别求MST,再 ...
- 快了快了,你的 MacBook Pro 和 FineUICore!
着玻璃窗,看到星巴克里那帮人拿着MacBook喝咖啡,你是不是要默念一遍:这帮傻叉,就爱装逼! 不过话说回来,你想不想尝试下这个傻叉的感觉? 是时候了,给自己一个理由,拥有自己的 MacBook Pr ...
- 遇到502错误,invalid request block size 解决方法
uWSGI是一个Web服务器,它实现了WSGI协议.uwsgi.http等协议.Nginx中HttpUwsgiModule的作用是与uWSGI服务器进行交换. 因为业务需求,要最多输入350个汉字,在 ...
- linux 分布式文件系统
分布式文件系统(DFS) 指文件系统管理的物理存储资源不一定直接连接在本地节点上 而是通过计算机网络与节点相连 分布式文件系统的设计基于客户机/服务器模式 一个典型的网络可能包括多个多个用户访问的服务 ...
- 普通权限拿webshell
普通权限拿webshell: 1.0day拿webshell:这个不多说.可以去网上搜索一些, 比如你找到你搞的网站cms是discz的,你可以搜索一些相 关0day直接拿 2.修改网站上传类 ...
- Token认证来龙去脉
在Web领域基于Token的身份验证随处可见.在大多数使用Web API的互联网公司中,tokens 是多用户下处理认证的最佳方式. 为什么要用 Token Token 完全由应用管理,所以它可以避开 ...