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 MYSQL乱码问题,使用SET NAMES utf8校正
Nov 30 PHP
php设计模式 Template (模板模式)
Jun 26 PHP
关于PHP结束标签的使用细节探讨及联想
Mar 04 PHP
PHP常用函数和常见疑难问题解答
Mar 05 PHP
php数组删除元素示例
Mar 21 PHP
PHP中余数、取余的妙用
Jun 29 PHP
jQuery+PHP发布的内容进行无刷新分页(Fckeditor)
Oct 22 PHP
PHP数字前补0的自带函数sprintf 和number_format的用法(详解)
Feb 06 PHP
php文件上传及下载附带显示文件及目录功能
Apr 27 PHP
PHP远程连接oracle数据库操作实现方法图文详解
Apr 11 PHP
PHP工厂模式、单例模式与注册树模式实例详解
Jun 03 PHP
windows系统php环境安装swoole具体步骤
Mar 04 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
PHP伪静态写法附代码
2008/06/20 PHP
保存到桌面、设为桌面且带图标的PHP代码
2013/11/19 PHP
教大家制作简单的php日历
2015/11/17 PHP
作为程序员必知的16个最佳PHP库
2015/12/09 PHP
mysql desc(DESCRIBE)命令实例讲解
2016/09/24 PHP
php多进程模拟并发事务产生的问题小结
2018/12/07 PHP
php判断IP地址是否在多个IP段内
2020/08/18 PHP
javascript学习笔记(十一) 正则表达式介绍
2012/06/20 Javascript
ListBox实现上移,下移,左移,右移的简单实例
2014/02/13 Javascript
jQuery验证插件 Validate详解
2014/11/20 Javascript
浅析四种常见的Javascript声明循环变量的书写方式
2015/10/14 Javascript
jquery实现网页的页面平滑滚动效果代码
2015/11/02 Javascript
浅谈jquery的map()和each()方法
2016/06/12 Javascript
解决jQuery ajax请求在IE6中莫名中断的问题
2016/06/20 Javascript
js操作DOM--添加、删除节点的简单实例
2016/07/08 Javascript
Vue自定义指令拖拽功能示例
2017/02/17 Javascript
基于cookie实现zTree树刷新后展开状态不变
2017/02/28 Javascript
AngularJS实现tab选项卡的方法详解
2017/07/05 Javascript
vue实现树形菜单效果
2018/03/19 Javascript
微信小程序实现的自定义分享功能示例
2019/02/12 Javascript
vue项目中在可编辑div光标位置插入内容的实现代码
2020/01/07 Javascript
[04:44]DOTA2 2017全国高校联赛视频回顾
2017/08/21 DOTA
python使用clear方法清除字典内全部数据实例
2015/07/11 Python
asyncio 的 coroutine对象 与 Future对象使用指南
2016/09/11 Python
python 排序算法总结及实例详解
2016/09/28 Python
matplotlib调整子图间距,调整整体空白的方法
2018/08/03 Python
对pandas中时间窗函数rolling的使用详解
2018/11/28 Python
python pyenv多版本管理工具的使用
2019/12/23 Python
Python argparse模块使用方法解析
2020/02/20 Python
Python3.8安装Pygame教程步骤详解
2020/08/14 Python
在线课程:Skillshare
2019/04/02 全球购物
PHP中如何使用Cookie
2015/10/28 面试题
高级工程师岗位职责
2013/12/15 职场文书
函授药学自我鉴定
2014/02/07 职场文书
六年级上册《闻官军收河南河北》的教学设计
2019/11/15 职场文书
win10音频服务未响应怎么解决?win10音频服务未响应未修复的解决方法
2022/08/14 数码科技