原文: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 反射类学习记录的更多相关文章

  1. Lua和C++交互 学习记录之九:在Lua中以面向对象的方式使用C++注册的类

    主要内容转载自:子龙山人博客(强烈建议去子龙山人博客完全学习一遍) 部分内容查阅自:<Lua 5.3  参考手册>中文版 译者 云风 制作 Kavcc vs2013+lua-5.3.3 在 ...

  2. Lua和C++交互 学习记录之八:C++类注册为Lua模块

    主要内容转载自:子龙山人博客(强烈建议去子龙山人博客完全学习一遍) 部分内容查阅自:<Lua 5.3  参考手册>中文版 译者 云风 制作 Kavcc vs2013+lua-5.3.3 1 ...

  3. MyBatis 学习记录3 MapperMethod类

    主题 之前学习了一下MapperProxy的生产过程,自定义Mapper类的对象是通过动态代理生产的,调用自定义方法的时候实际上是调用了MapperMethod的execute方法:mapperMet ...

  4. Quartz 学习记录1

    原因 公司有一些批量定时任务可能需要在夜间执行,用的是quartz和spring batch两个框架.quartz是个定时任务框架,spring batch是个批处理框架. 虽然我自己的小玩意儿平时不 ...

  5. Java设计模式学习记录-单例模式

    前言 已经介绍和学习了两个创建型模式了,今天来学习一下另一个非常常见的创建型模式,单例模式. 单例模式也被称为单件模式(或单体模式),主要作用是控制某个类型的实例数量是一个,而且只有一个. 单例模式 ...

  6. Elasticsearch、XXLJob以及最近的学习记录

    Elasticsearch.XXLJob以及最近的学习记录 前言 在这九月的最后一周,来总结一下最近的学习记录,主要是对于Elasticsearch.XXLjob的初步学习,想着还是多记录点,以便后面 ...

  7. Java 8 学习记录

    Java 8 学习记录 官方文档 https://docs.oracle.com/javase/8/ https://docs.oracle.com/javase/8/docs/index.html ...

  8. Java 静态内部类与非静态内部类 学习记录.

    目的 为什么会有这篇文章呢,是因为我在学习各种框架的时候发现很多框架都用到了这些内部类的小技巧,虽然我平时写代码的时候基本不用,但是看别人代码的话至少要了解基本知识吧,另外到底内部类应该应用在哪些场合 ...

  9. Apache Shiro 学习记录4

    今天看了教程的第三章...是关于授权的......和以前一样.....自己也研究了下....我觉得看那篇教程怎么说呢.....总体上是为数不多的精品教程了吧....但是有些地方确实是讲的太少了.... ...

随机推荐

  1. PHP实现WebService的简单示例和实现步骤

    首先我创建的文件有: api.php api的接口类文件 api.wsdl 我创建产生的最后要调用的接口文件 cometrue.php 注册service api类内容的所有内容的执行文件 creat ...

  2. Android查缺补漏(IPC篇)-- Bundle、文件共享、ContentProvider、Messenger四种进程间通讯介绍

    本文作者:CodingBlock 文章链接:http://www.cnblogs.com/codingblock/p/8387752.html 进程间通讯篇系列文章目录: Android查缺补漏(IP ...

  3. 通过修改注册表设置windows环境变量

    开发环境搭建每次都要设置很多环境变量, 一般是通过  [菜单]->[计算机]->[属性]->[高级设置]->[环境变量]进行设置,重装系统后,每次都要设置很多环境变量,很麻烦. ...

  4. 码农很忙代理IP系统V1.0版本上线

    码农很忙代理IP系统V1.0版本上线 经过为期一个月的重写和测试,新版本的码农很忙代理IP系统已于今日正式上线.新版本拥有更精准的匿名类型识别和更高效的验证调度算法. 新版本仍旧采用ASP.NET B ...

  5. Python网络编程(2)-粘包现象及socketserver模块实现TCP并发

    1. 基于Tcp的远程调用命令实现 很多人应该都使用过Xshell工具,这是一个远程连接工具,通过上面的知识,就可以模拟出Xshell远程连接服务器并调用命令的功能. Tcp服务端代码如下: impo ...

  6. lnmp HTTP ERROR 500

    http://www.cnblogs.com/thrillerz/p/4725409.html

  7. wamp server环境下mysql数据库的密码为什么修改不了?

    每次这个控制台,不输入密码可以直接用,用root登录都登录不了.修改root密码也修改不了.困惑? 经过不断的尝试终于找到解决的办法: 1,在mysql的配置文件my.ini的末尾添加 skip-gr ...

  8. Centos环境下给PHP7.0安装yaf扩展

    首先要知道PHP的安装目录在哪里,以我当前的路径为例,在/usr/local/php目录下. 下一步需要下载扩展包,进入http://pecl.php.net/package/yaf寻找符合版本要求的 ...

  9. Oauth认证协议

    原文地址腾讯QQ第三方登录的实现原理? Oauth当中的角色: 1.Service Provider(服务提供方): 服务提供方通常是网站,在这些网站当中存储着一些受限制的资源,如照片.视频.联系人列 ...

  10. Ajax检测用户名是否已经注册

    程序功能 当用户名输入完成(即用户名输入框失去焦点),利用Ajax检测用户名是否已经注册! 实现过程 利用Ajax向CheckUserServlet发送请求,判断该用户名是否可用.这里只是为了演示Aj ...