PHP反射学习入门示例


Posted in PHP onJune 14, 2019

本文实例讲述了PHP反射。分享给大家供大家参考,具体如下:

今天开始学习php 的反射,许多人可能还没有听说过反射这个概念,简单点说反射的就是让你拥有剖析类、函数的能力。

有的同学可能会问我剖析类有什么用,我为什么要学反射,我只能说不学反射并不会对你实现业务有任何影响,但是如果你想写出结构优雅的程序,想写出维护性和扩展性都很高的程序,学习反射是必不可少的。

PHP 内置了一组反射类来实现类的反射,常用的有:

  • ReflectionClass 解析类
  • ReflectionProperty 类的属性的相关信息
  • ReflectionMethod 类方法的有关信息
  • ReflectionParameter 取回了函数或方法参数的相关信息

想看全的就翻手册去。

今天先通过一段演示代码简单看下php的反射到底是个什么东西。

<?php
class Hero {
  protected $name;
  protected $skills = [];
  public function __construct($name, $skills = []) {
    $this->name = $name;
    $this->skills = $skills;
  }
  public function attack($hero) {
    echo "Attack {$hero->name}" . PHP_EOL;
  }
  public function execute($index) {
    echo "Axecute {$index} skill" . PHP_EOL;
  }
}
$ref = new ReflectionClass('Hero');
if ($ref->isInstantiable()) {
  echo '可以实例化' . PHP_EOL;
}
// 获取类的构造函数
$constructor = $ref->getConstructor();
print_r($constructor); //ReflectionMethod E对象
//获取属性
if ($ref->hasProperty('name')) {
  $attr = $ref->getProperty('name');
  print_r($attr); //ReflectionProperty 对象
}
// 获取属性列表
$attributes = $ref->getProperties();
foreach ($attributes as $row) {
  //row 为 ReflectionProperty 的实例
  echo $row->getName() . "\n";
}
// 获取方法
if ($ref->hasMethod('attack')) {
  $method = $ref->getMethod('attack');
  //$method 为 ReflectionMethod 的实例
  print_r($method);
}
// 获取方法列表
$methods = $ref->getMethods();
foreach ($methods as $row) {
  //这的row 是 ReflectionMethod 的实例
  echo $row->getName() . PHP_EOL;
}

运行结果:

可以实例化
ReflectionMethod Object
(
    [name] => __construct
    [class] => Hero
)
ReflectionProperty Object
(
    [name] => name
    [class] => Hero
)
name
skills
ReflectionMethod Object
(
    [name] => attack
    [class] => Hero
)
__construct
attack
execute

学习新东西,首先是要有熟悉感,或者叫手感,有了手感你才会对它不畏惧,先把上面的代码抄上一篇,运行一下,你应该会对php 反射有一点初步的印象。

下一篇再做一个小例子,看看用发可以做什么神奇的事情。

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
PHP图片上传类带图片显示
Nov 25 PHP
smarty缓存用法分析
Dec 16 PHP
推荐5款跨平台的PHP编辑器
Dec 25 PHP
php中switch与ifelse的效率区别及适用情况分析
Feb 12 PHP
php实现背景图上添加圆形logo图标的方法
Nov 17 PHP
Laravel 实现密码重置功能
Feb 23 PHP
PHP生成推广海报的方法分享
Apr 22 PHP
实例介绍PHP中zip_open()函数用法
Feb 15 PHP
laravel 5.3 单用户登录简单实现方法
Oct 14 PHP
laravel实现图片上传预览,及编辑时可更换图片,并实时变化的例子
Nov 14 PHP
TP5框架实现上传多张图片的方法分析
Mar 29 PHP
PHP程序员简单的开展服务治理架构操作详解(三)
May 14 PHP
PHP如何实现阿里云短信sdk灵活应用在项目中的方法
Jun 14 #PHP
PHP中常用的三种设计模式详解【单例模式、工厂模式、观察者模式】
Jun 14 #PHP
PHP面向对象程序设计子类扩展父类(子类重新载入父类)操作详解
Jun 14 #PHP
PHP面向对象程序设计模拟一般面向对象语言中的方法重载(overload)示例
Jun 13 #PHP
PHP面向对象程序设计重载(overloading)操作详解
Jun 13 #PHP
PHP面向对象程序设计之构造方法和析构方法详解
Jun 13 #PHP
PHP Cli 模式设置进程名称的方法
Jun 12 #PHP
You might like
农民和部队如何穿矿
2020/03/04 星际争霸
php实现文件下载更能介绍
2012/11/23 PHP
基于php中使用excel的简单介绍
2013/08/02 PHP
PHP中使用数组指针函数操作数组示例
2014/11/19 PHP
制作个性化的WordPress登陆界面的实例教程
2016/05/21 PHP
Zend Framework入门教程之Zend_Registry组件用法详解
2016/12/09 PHP
Laravel多域名下字段验证的方法
2019/04/04 PHP
PHP切割汉字的常用方法实例总结
2019/04/27 PHP
Laravel实现搜索的时候分页并携带参数
2019/10/15 PHP
jquery 之 $().hover(func1, funct2)使用方法
2012/06/14 Javascript
JS获取后台Cookies值的小例子
2013/03/04 Javascript
IE下Ajax缓存问题的快速解决方法(get方式)
2014/01/09 Javascript
DOM基础教程之事件对象
2015/01/20 Javascript
js获取form的方法
2015/05/06 Javascript
jQuery实现调整表格单列顺序完整实例
2016/06/20 Javascript
基于JavaScript实现前端文件的断点续传
2016/10/17 Javascript
node.js中TCP Socket多进程间的消息推送示例详解
2018/07/10 Javascript
vue axios数据请求及vue中使用axios的方法
2018/09/10 Javascript
利用JS响应式修改vue实现页面的input值
2019/09/02 Javascript
JavaScript实现简单进度条效果
2020/03/25 Javascript
vue+element获取el-table某行的下标,根据下标操作数组对象方式
2020/08/07 Javascript
基于Python和C++实现删除链表的节点
2020/07/06 Python
Html5调用手机摄像头并实现人脸识别的实现
2018/12/21 HTML / CSS
碧欧泉美国官网:Biotherm美国
2016/08/31 全球购物
ProForm英国站点:健身房和健身器材网上商店
2019/06/05 全球购物
医学护理系毕业生求职信
2013/10/01 职场文书
大学生专业个人学习的自我评价
2013/10/26 职场文书
司机岗位职责
2013/11/15 职场文书
司仪主持词两篇
2014/03/22 职场文书
2014年十一国庆向国旗敬礼寄语
2014/04/11 职场文书
医学求职信
2014/05/28 职场文书
教师暑期培训感言
2014/08/15 职场文书
MySQL表的增删改查基础教程
2021/04/07 MySQL
CSS 新特性 contain控制页面的重绘与重排问题
2021/04/30 HTML / CSS
快速学习Oracle触发器和游标
2021/06/30 Oracle
Python 数据可视化之Seaborn详解
2021/11/02 Python