我的博文的前一篇解说了PHP的反射机制是怎么回事,假设读者还不清楚反射机制,能够搜索下或者看我的博文,都是不错的选择。我们開始解说一下怎么用PHP来实现插件机制。所谓插件机制。就是我们定义一个接口。即我们定义一个interface,然后第三方插件就去实现这个interface,然后我们拿到了这个插件之后,去调用这个插件的功能,我们能够不知道这些插件的类名等信息,我们接下来就用反射机制去实现这个功能。

因为我仅仅是简单的演示样例。所以我写的代码并不长,并且非常easy,所以,大家既然理解了上面的步骤,那么就能够直接看源码了,当中的凝视还是蛮清楚的。假设读者有什么不清楚的,能够告诉我,我会认真回复的。

<?

php /** *我们定义好一个接口。叫做Ixin */ interface Ixin{ function msg(); } /** *某热心开发者给我们写了一个插件类 */ class Xin implements Ixin{ function msg(){ echo "辛星你好"; } } /** *我们先搜索该插件类。而且推断它是否实现了msg方法 */ function find(){ //定义描写叙述插件的数组 $plugin = array(); foreach (get_declared_classes() as $class) { //实例化反射类的类 $reclass = new ReflectionClass($class); //推断它是否实现了接口Ixin if($reclass->implementsInterface('Ixin')){ $plugin[] = $reclass; } } return $plugin; } /** *我们去调用该插件的msg方法 */ function myexec(){ $arr = find(); foreach (find() as $plugin) { //推断该插件是否有方法msg if($plugin->hasMethod('msg')){ //得到这种方法类的一个实例 $remethod = $plugin->getMethod('msg'); //假设它是静态方法。则直接调用就可以 if($remethod->isStatic()){ $remethod->invoke(null); }else{ //先声明插件类的一个实例。然后调用它 $pluins = $plugin->newInstance(); $remethod->invoke($pluins); } } } } /** *我们仅仅须要调用这一个函数就能够了 *它自己主动搜索全部的插件,而且运行插件的msg函数 */ myexec();

我还是分析一下吧,接口Ixin是我们定义的接口。而类Xin是第三方的插件,我们用find自己主动搜索了全部定义的类,然后我们推断这些类里面谁继承自Ixin,而且实现了msg方法,我们拿到了这个列表自后,就能够用myexec方法去调用它们了。

思路清晰吗?清晰请打1.。

。。O(∩_∩)O~

转载于:https://www.cnblogs.com/jzssuanfa/p/7043996.html

跟着辛星用PHP的反射机制来实现插件相关推荐

  1. 利用Java反射机制和poi插件操作excel

    最近在公司写一个利用poi插件读取excel的东西,,不想每一个都写一遍解析代码.就想利用Java的反射机制,写对应的实体类,获取对应excel中的值,下面是解析的代码,仅供参考.不足之处,望指出/* ...

  2. php 插件 代码架构,php反射机制详以及插件架构实例详解

    1.用途: 该扩展分析php程序,导出或提取出关于类.方法.属性.参数等的详细信息,包括注释. Reflection可以说是对php库函数:"Classes/Objects 类/对象函数&q ...

  3. 辛星跟您玩转vim第一节之vim的下载与三种模式

    首先值得一提的是,我的vim教程pdf版本号已经写完了,大家能够去下载,这里是csdn的下载地址:点此下载 ,假设左边的下载地址挂掉了,也能够自行在浏览器以下输入例如以下地址进行下载:http://d ...

  4. java反射机制调用带参数的方法_Java反射机制:跟着代码学反射

    1. 前言 在OOP的世界里,万物皆对象.也就是说,我们可以将任何东西抽象成一个对象. 比如人,可以抽象成一个Person类,通过new Person()来实例化一个对象:再比如鸭子,可以抽象成一个D ...

  5. 【2014】【辛星】【php】【秋季】【2】第一个php程序

    <span style="font-family:KaiTi_GB2312;font-size:18px;">*******************设置server** ...

  6. 辛星和您一起手写CSS气泡

    上文中我公布了一篇手写导航条的博客,那么这一篇博客我将和大家一起手写气泡.那么什么是气泡呢?先给那些刚入门的童鞋一个截图,来更好的认识一下什么是气泡把: 这就是一个简单的气泡啦,那么它主要用来干什么呢 ...

  7. 一文读懂 Java 反射机制那些事

    作者:四夕又欠 用时:12 min 前不久学习了反射机制,来总结下.在此之前,回顾下java程序的编译运行过程,分为三个阶段:源码(.java文件)进过编译生成字节码文件(.class文件),然后jv ...

  8. Java核心类库之(类加载器、反射机制、模块化)

    目录 1 类加载器 1.1 类加载 1.2 类加载器 2 反射 2.1 反射概述 2.2 反射获取Class类的对象 2.3 反射获取构造方法并使用 2.4 反射获取成员变量并使用 2.5 反射获取成 ...

  9. java 重点!反射机制学习

    反射机制:java语言通过此可以更改字节码文件(class文件),类似黑客 与之相关的类有java.class java.lang.reflect.Field,类的属性,静态变量,实例变量 java. ...

最新文章

  1. 分享一个C#使用AT指令控制语音猫的例子
  2. python下载的库要放到哪里-python库在哪里下载?怎么安装?
  3. python数组加入新元素_Python之list添加新元素、删除元素、替换元素
  4. SQL存储过程的导入导出
  5. 从容 IT 人生路,开发工具伴我行——“葡萄城 30 周年”征文
  6. Selenium3+python 加载Firefox配置
  7. 如何使用JMeter自身代理录制APP测试脚本
  8. 创建一个Scrapy爬虫项目并运行
  9. Android 12新功能:使用SplashScreen优化启动体验
  10. 安卓输入法 车机版_搜狗输入法车机下载安装-搜狗输入法车载版下载v10.10.1 安卓版-单机手游网...
  11. yasm/nasm not found or too old. Use --disable-yasm for a crippledbuild错误
  12. web前端期末大作业 基于HTML+CSS家乡主题毕业设计源码
  13. 北京亿阳信通Oracle笔试题
  14. rhino java api demo_用 Rhino 脚本化 Java
  15. 找出成绩全及格的学生(python)实现
  16. 什么公司需要Linux运维,为什么企业会需要Linux运维?Linux入门!
  17. 达里奥:我阅人无数,没有一个成功人士天赋异禀 |【经纬低调分享】
  18. StopWatch使用
  19. 关于初学算法,习题2-2 韩信点兵(hanxin)的一些需要谨记的点
  20. 远程控制软件如何实现两台电脑连接

热门文章

  1. 前端菜鸟是这样入门学习的,点进来!
  2. 快速入门Web前端开发的正确姿势
  3. Web前端的性能优化,需要怎么做?
  4. 10个JavaScript代码片段,帮助你成为更好的开发者
  5. Servlet超详解+流程图
  6. android释放全局变量,Android全局变量
  7. unity2d随机生成物体_平面测量路径生成的4种方式
  8. power bi 日期计算_2020国内外常用的BI商业智能软件
  9. antares harmony engine安装_PS CC2017安装教程
  10. boss 计算机应用,Time Boss(电脑使用时间限制软件)官方版