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初学者头痛的十四个问题
Jul 12 PHP
BBS(php &amp; mysql)完整版(一)
Oct 09 PHP
2个自定义的PHP in_array 函数,解决大量数据判断in_array的效率问题
Apr 08 PHP
php函数与传递参数实例分析
Nov 15 PHP
php实现的xml操作类
Jan 15 PHP
PHP+sqlite数据库操作示例(创建/打开/插入/检索)
May 26 PHP
php倒计时出现-0情况的解决方法
Jul 28 PHP
PHP面向对象程序设计类的定义与用法简单示例
Dec 27 PHP
PHP中使用jQuery+Ajax实现分页查询多功能操作(示例讲解)
Sep 17 PHP
Laravel利用gulp如何构建前端资源详解
Jun 03 PHP
PHP call_user_func和call_user_func_array函数的简单理解与应用分析
Nov 25 PHP
PHP7 整型处理机制修改
Mar 09 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分页示例代码
2007/03/19 PHP
PHP 一个随机字符串生成代码
2010/05/26 PHP
ThinkPHP空模块和空操作详解
2014/06/30 PHP
php、java、android、ios通用的3des方法(推荐)
2016/09/09 PHP
php爬取天猫和淘宝商品数据
2018/02/23 PHP
Windows上php5.6操作mongodb数据库示例【配置、连接、获取实例】
2019/02/13 PHP
Js获取事件对象代码
2010/08/05 Javascript
js中将URL中的参数提取出来作为对象的实现代码
2011/08/16 Javascript
JavaScript去除空格的三种方法(正则/传参函数/trim)
2013/02/06 Javascript
jQuery+JSON+jPlayer实现QQ空间音乐查询功能示例
2013/06/17 Javascript
js 剪切板的用法(clipboardData.setData)与js match函数介绍
2013/11/19 Javascript
javascript页面动态显示时间变化示例代码
2013/12/18 Javascript
JQuery select(下拉框)操作方法汇总
2015/04/15 Javascript
浅谈JS运算符&amp;&amp;和|| 及其优先级
2016/08/10 Javascript
使用开源工具制作网页验证码的方法
2016/10/17 Javascript
AngularJS使用angular.bootstrap完成模块手动加载的方法分析
2017/01/19 Javascript
微信小程序调用PHP后台接口 解析纯html文本
2017/06/13 Javascript
JavaScript类数组对象转换为数组对象的方法实例分析
2018/07/24 Javascript
使用JavaScript保存文本文件到本地的两种方法
2019/01/22 Javascript
Vue自定义多选组件使用详解
2020/09/08 Javascript
[02:40]DOTA2英雄基础教程 先知
2013/11/29 DOTA
python处理文本文件实现生成指定格式文件的方法
2014/07/31 Python
Python实现的字典排序操作示例【按键名key与键值value排序】
2018/12/21 Python
python 实现读取一个excel多个sheet表并合并的方法
2019/02/12 Python
python使用递归的方式建立二叉树
2019/07/03 Python
python爬取百度贴吧前1000页内容(requests库面向对象思想实现)
2019/08/10 Python
解决jupyter运行pyqt代码内核重启的问题
2020/04/16 Python
python实现简单的tcp 文件下载
2020/09/16 Python
国际贸易专业个人求职信范文分享
2013/12/14 职场文书
小学生感恩演讲稿
2014/04/25 职场文书
暖通工程师岗位职责
2014/06/12 职场文书
抗洪救灾标语
2014/10/08 职场文书
廉洁自律承诺书2015
2015/01/22 职场文书
2015年新农村建设工作总结
2015/05/22 职场文书
回复函格式及范文
2015/07/14 职场文书
2016年春季趣味运动会开幕词
2016/03/04 职场文书