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 相关文章推荐
PHP 服务器配置(使用Apache及IIS两种方法)
Jun 01 PHP
Linux下将excel数据导入到mssql数据库中的方法
Feb 08 PHP
PHP中防止SQL注入实现代码
Feb 19 PHP
php中使用$_REQUEST需要注意的一个问题
May 02 PHP
PHP转换文件夹下所有文件编码的实现代码
Jun 06 PHP
解析dedeCMS验证码的实现代码
Jun 07 PHP
thinkphp获取栏目和文章当前位置的方法
Oct 29 PHP
PHP+jquery实时显示网站在线人数的方法
Jan 04 PHP
Ubuntu下安装PHP的mongodb扩展操作命令
Jul 04 PHP
yii2缓存Caching基本用法示例
Jul 18 PHP
php使用fullcalendar日历插件详解
Mar 06 PHP
php用wangeditor3实现图片上传功能
Aug 22 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
使用 php4 加速 web 传输
2006/10/09 PHP
php实现跨域提交form表单的方法【2种方法】
2016/10/17 PHP
基于php+MySql实现学生信息管理系统实例
2020/08/04 PHP
Code:loadScript( )加载js的功能函数
2007/02/02 Javascript
用Div仿showModalDialog模式菜单的效果的代码
2007/03/05 Javascript
网页图片延时加载的js代码
2010/04/22 Javascript
javascript 禁用IE工具栏,导航栏等等实现代码
2013/04/01 Javascript
详解JavaScript的变量和数据类型
2015/11/27 Javascript
如何利用模板将HTML从JavaScript中抽离
2016/10/08 Javascript
easyui messager alert 三秒后自动关闭提示的实例
2016/11/07 Javascript
JS常见简单正则表达式验证功能小结【手机,地址,企业税号,金额,身份证等】
2017/01/22 Javascript
微信小程序教程系列之新建页面(4)
2017/04/17 Javascript
微信小程序如何获知用户运行小程序的场景教程
2017/05/17 Javascript
微信小程序授权登录及解密unionId出错的方法
2018/09/26 Javascript
小程序实现自定义导航栏适配完美版
2019/04/02 Javascript
[37:21]完美世界DOTA2联赛PWL S2 Inki vs Magma 第二场 11.22
2020/11/24 DOTA
python修改注册表终止360进程实例
2014/10/13 Python
Python回文字符串及回文数字判定功能示例
2018/03/20 Python
pandas object格式转float64格式的方法
2018/04/10 Python
python hook监听事件详解
2018/10/25 Python
Flask之请求钩子的实现
2018/12/23 Python
Python模块的加载讲解
2019/01/15 Python
python 应用之Pycharm 新建模板默认添加编码格式-作者-时间等信息【推荐】
2019/06/17 Python
pyinstaller还原python代码过程图解
2020/01/08 Python
Python3 获取文件属性的方式(时间、大小等)
2020/03/12 Python
浅谈Python 钉钉报警必备知识系统讲解
2020/08/17 Python
解决python和pycharm安装gmpy2 出现ERROR的问题
2020/08/28 Python
俄罗斯披萨、寿司和面食送货到家服务:2 Берега
2019/12/15 全球购物
行政管理人员精品工作推荐信
2013/11/04 职场文书
市政管理求职信范文
2014/05/07 职场文书
借款担保书范文
2014/05/13 职场文书
毕业生学校推荐信范文
2014/05/21 职场文书
英语教育专业自荐信
2014/05/29 职场文书
伦敦奥运会的口号
2014/06/21 职场文书
群众路线学习心得体会范文
2014/11/05 职场文书
经典搞笑版检讨书
2015/02/19 职场文书