php 的反射详解及示例代码


Posted in PHP onAugust 25, 2016

 最近在看java编程思想,看到类型信息这一章,讲到了类的信息以及反射的概念。顺便温故一下php的反射东西。手册是这样说的:"PHP 5 具有完整的反射 API,添加了对类、接口、函数、方法和扩展进行反向工程的能力。 此外,反射 API 提供了方法来取出函数、类和方法中的文档注释。"当然手册上说的有些抽象!所谓的逆向说白就是能获取关于类、方法、属性、参数等的详细信息,包括注释! 文字总是那么枯燥,举个例子

class Foo {
  public  $foo = 1;
  protected $bar = 2;
  private  $baz = 3;
  
  /**
   * Enter description here ...
   */
  public function myMethod()
  {
    echo 'hello 2b';
  }
}

$ref = new ReflectionClass('Foo');
$props = $ref->getProperties();
foreach ($props as $value) {
  echo $value->getName()."\n";
}

//output
//foo 
//bar
//baz

ReflectionClass 这个类返回时某个类的相关的信息,比如 属性,方法,命名空间,实现那些接口等!上个例子中ReflectionClass:: getProperties 返回是 ReflectionProperty 对象的数组。

ReflectionProperty 类报告了类的属性的相关信息。比如  isDefault isPrivate  isProtected isPublic isStatic等,方法getName 是获取属性的名称!

以上是获取属性的,还有获取类方法的比如

class Foo {
  public  $foo = 1;
  protected $bar = 2;
  private  $baz = 3;
  
  /**
   * Enter description here ...
   */
  public function myMethod()
  {
    echo 'hello 2b';
  }
}

$ref = new ReflectionClass('Foo');
$method = $ref->getMethod('myMethod');
$method->invoke($ref->newInstance());

ReflectionClass::getMethod 是反是一个 ReflectionMethod 类型 ,ReflectionMethod 类报告了一个方法的有关信息,比如 isAbstract isPrivate  isProtected isPublic isStatic   isConstructor,还有一个重要的方法Invoke,InvokeArgs 就是执行方法!

其他的对象可以看看手册,不是很难!

那反射究竟有哪些用途?

反射是一个动态运行的概念,综合使用他们可用来帮助我们分析其它类,接口,方法,属性,方法和扩展。还可构建模式,比如动态代理。在一些php框架中使用反射也是很经常,比如kohana,yii,下面是kohana 的实现mvc的代码,就是用到了反射!

// Start validation of the controller
$class = new ReflectionClass(ucfirst(Router::$controller).'_Controller');
// Create a new controller instance
$controller = $class->newInstance();
// Load the controller method
$method = $class->getMethod(Router::$method);
// Execute the controller method
$method->invokeArgs($controller, $arguments);

上面的代码可以清晰看到这个框架的流程!通过Router 其实就处理url的类,通过Router可以获取哪个控制器、哪个方法!然后再执行方法!

以上就是对PHP 反射的资料整理,后续继续补充相关资料,谢谢大家对本站的支持!

PHP 相关文章推荐
PHP4与PHP3中一个不兼容问题的解决方法
Oct 09 PHP
一个简单实现多条件查询的例子
Oct 09 PHP
PHP初学入门
Nov 19 PHP
discuz 首页四格:最新话题+最新回复+热门话题+精华文章插件
Aug 19 PHP
PHP导出EXCEL快速开发指南--PHPEXCEL的使用详解
Jun 03 PHP
PHP实现绘制3D扇形统计图及图片缩放实例
Oct 01 PHP
一个PHP实现的轻量级简单爬虫
Jul 08 PHP
thinkPHP导出csv文件及用表格输出excel的方法
Dec 30 PHP
PHP7新增运算符用法实例分析
Sep 26 PHP
Yii框架核心组件类实例详解
Aug 06 PHP
php设计模式之原型模式分析【星际争霸游戏案例】
Mar 23 PHP
PHP 面向对象程序设计之类属性与类常量实现方法分析
Apr 13 PHP
php 输入输出流详解及示例代码
Aug 25 #PHP
PHP 输出缓冲控制(Output Control)详解
Aug 25 #PHP
PHP中利用sleep函数实现定时执行功能实现代码
Aug 25 #PHP
PHP sleep()函数, usleep()函数
Aug 25 #PHP
PHP页面间传递值和保持值的方法
Aug 24 #PHP
PHP中explode函数和split函数的区别小结
Aug 24 #PHP
php处理单文件、多文件上传代码分享
Aug 24 #PHP
You might like
2019年中国咖啡业现状与发展趋势
2021/03/04 咖啡文化
一个简单的PHP验证码实现代码
2014/05/10 PHP
PHP获取星期几的常用方法小结
2018/12/18 PHP
thinkphp3.2框架中where条件查询用法总结
2019/08/13 PHP
超级兔子让浮动层消失的前因后果
2007/03/09 Javascript
JavaScript中的事件处理
2008/01/16 Javascript
JQuery 学习笔记 选择器之四
2009/07/23 Javascript
js下用gb2312编码解码实现方法
2009/12/31 Javascript
基于JQuery的6个Tab选项卡插件
2010/09/03 Javascript
PhotoShop给图片自动添加边框及EXIF信息的JS脚本
2015/02/15 Javascript
JS实现获取图片大小和预览的方法完整实例【兼容IE和其它浏览器】
2017/04/24 Javascript
JS实现手写parseInt的方法示例
2017/09/24 Javascript
javaScript动态添加Li元素的实例
2018/02/24 Javascript
微信小程序开发之改变data中数组或对象的某一属性值
2018/07/05 Javascript
详解Vue项目中出现Loading chunk {n} failed问题的解决方法
2018/09/14 Javascript
vuex + axios 做登录验证 并且保存登录状态的实例
2018/09/16 Javascript
Vue.js结合bootstrap前端实现分页和排序效果
2018/12/29 Javascript
用Fundebug插件记录网络请求异常的方法
2019/02/21 Javascript
基于JS抓取某高校附近共享单车位置 使用web方式展示位置变化代码实例
2019/08/27 Javascript
[03:32]2014DOTA2西雅图邀请赛 CIS外卡赛赛前black专访
2014/07/09 DOTA
[02:36]DOTA2-DPC中国联赛 正赛 PSG.LGD vs Magma 选手采访
2021/03/11 DOTA
python中的lambda表达式用法详解
2016/06/22 Python
简单谈谈python中的多进程
2016/11/06 Python
pygame加载中文名mp3文件出现error
2017/03/31 Python
Django中的Signal代码详解
2018/02/05 Python
使用pandas将numpy中的数组数据保存到csv文件的方法
2018/06/14 Python
Python Json数据文件操作原理解析
2020/05/09 Python
LN-CC中国:高端男装和女装的奢侈时尚目的地
2019/09/14 全球购物
面向对象编程OOP的优点
2013/01/22 面试题
农场厂长岗位职责
2013/12/28 职场文书
护理学应聘自荐书范文
2014/02/05 职场文书
信贷客户经理岗位职责
2015/04/09 职场文书
统计员岗位职责范本
2015/04/14 职场文书
MySQL Router实现MySQL的读写分离的方法
2021/05/27 MySQL
Win11 PC上的Outlook搜索错误怎么办?
2022/07/15 数码科技
win10此电脑打不开怎么办 win10双击此电脑无响应的解决办法
2022/07/23 数码科技