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
今天看了教程的第三章...是关于授权的......和以前一样.....自己也研究了下....我觉得看那篇教程怎么说呢.....总体上是为数不多的精品教程了吧....但是有些地方确实是讲的太少了.... ...
随机推荐
- 洛谷P2286 [HNOI2004]宠物收养场【Treap】题解+AC代码
题目传送门啦~啦~啦~ 题目描述 凡凡开了一间宠物收养场.收养场提供两种服务:收养被主人遗弃的宠物和让新的主人领养这些宠物. 每个领养者都希望领养到自己满意的宠物,凡凡根据领养者的要求通过他自己发明的 ...
- angular-file-upload封装为指令+图片尺寸限制
不了解angular-file-upload基础使用 请先参考http://blog.csdn.net/lai_xu/article/details/49535847 博客地址 下文如果有更好的建议请 ...
- mysql之mysql_config_editor
本文来自我的github pages博客http://galengao.github.io/ 即www.gaohuirong.cn mysql_config_editor允许你把登录的身份验证信息存储 ...
- 简单http文件服务器
日常工作中,主要是通过ssh终端(putty等)远程开发,经常涉及到传输文件,因为本地系统为Win10,所以没办法利用强大的linux脚本来进行文件传输.之前用过python的SimpleHttp模块 ...
- python进阶学习笔记(三)
3.类的继承 3.1,python中什么是类的继承 答案是肯定的. 也就是说,如果一个实例是一个子类,那么它也是一个父类 总是从某各类继承,如果没有合适的类,就要从object类继承:super(). ...
- MongoDB入门系列(四):权限管理
一.概述 本篇文章主要介绍如何创建用户和角色相关概念,同时对角色的添加和删除做了相关介绍. 版本:3.6.2 二.角色相关概念 1.数据库用户角色 read:该角色拥有数据的只读权限,系统集合以及sy ...
- ActiveRecord的生命周期
ActiveRecord的生命周期,通过方法重写和插入我们需要的业务逻辑来达到我们对程序的控制. 示例: 1,beforeSave() public function beforeSave($inse ...
- 下载visual studio 的离线包
我们知道,visual studio是微软发布的软件开发的集成平台,十分好用,可以说是目前最好用的软件编辑工具. 最新版的是visual studio 2017,但是在微软的官网上只支持下载在线安装器 ...
- sqlalchemy和flask-sqlalchemy几种分页操作
sqlalchemy中使用query查询,而flask-sqlalchemy中使用basequery查询,他们是子类与父类的关系 假设 page_index=1,page_size=10:所有分页查询 ...
- hive上mysql元数据库配置
hive调试信息显示模式: ./hive -hiveconf hive.root.logger=DEBUG,console 非常有用. 默认情况下,Hive元数据保存在内嵌的 Derby 数据库中,只 ...