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
今天看了教程的第三章...是关于授权的......和以前一样.....自己也研究了下....我觉得看那篇教程怎么说呢.....总体上是为数不多的精品教程了吧....但是有些地方确实是讲的太少了.... ...
随机推荐
- maxscale读写分离
今天,写写mysql兄弟公司maridb开发的一个读写分离,既然是兄弟,那也适用于mysql. 1.安装依赖包 yum -y install gcc gcc-c++ ncurses ncurses-d ...
- C/C++语言简介之发展历史
C语言之所以命名为C,是因为 C语言源自Ken Thompson发明的B语言,而 B语言则源自BCPL语言. 1967年,剑桥大学的Martin Richards对CPL语言进行了简化,于是产生了BC ...
- Java经典编程题50道之二
判断101-200之间有多少个素数,并输出所有素数. public class Example02 { public static void main(String[] args) { ...
- thinkPHP替换SQL变量
使用tp里M()->where(pb_id=%d and course=%d and DATE_FORMAT(pub_time, \"%H:%i:%s\") < &qu ...
- Zend Framework在windows下的安装
1:首先需要下载安装PHP的依赖管理工具Composer 详情去http://docs.phpcomposer.com/了解 下载链接: https://getcomposer.org/downloa ...
- 动态规划算法的java实现
一:动态规划 1)动态规划的向前处理法 java中没有指针,所以邻接表的存储需要转化一中形式,用数组存储邻接表 用三个数组u,v,w存储边,u数组代表起点,v数组代表终点,w代表权值;例如:1--&g ...
- 业余草分享100套精选1000G架构师资料课程(超1T的IT学习资料免费送)
业余草分享100套精选1000G架构师资料课程(超1T的IT学习资料免费送). 超过1024G的IT学习资料免费领取,你值得拥有! 领取资源方式,关注“业余草”公众号,回复对应的关键字 01.回复”我 ...
- pep 8 规范的一些记录
一.pep8起源 龟叔创立Python的初衷里就有创立一个容易阅读的编程语言,所以亲自操刀写了pep8 代码规范,每个项目开始前都要有一个共识,就是自己的代码规范,pep8 就是一个很好的范本. 二. ...
- HDU - 2187 贪心
思路: 按照单价升序排序,依次买就行. AC代码 #include <cstdio> #include <cmath> #include <algorithm> ...
- AWS EC2 通过Linux终端:使用ssh连接到Linux实例
AWS的ubuntu主机登录用户是ubuntu 只能通过秘钥的方式登录 如果在linux终端通过ssh远程登录步骤如下: 假如申请EC2主机的时候下载的key名称叫my-key.pem,并保存在本地l ...