博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
跟着辛星用PHP的反射机制来实现插件
阅读量:5156 次
发布时间:2019-06-13

本文共 1358 字,大约阅读时间需要 4 分钟。

     我的博文的前一篇解说了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

你可能感兴趣的文章
JavaScript---Promise
查看>>
暖暖的感动
查看>>
Java中的日期和时间
查看>>
Django基于admin的stark组件创建(一)
查看>>
PAT L2-016 愿天下有情人都是失散多年的兄妹
查看>>
抛弃IIS,利用FastCGI让Asp.net与Nginx在一起
查看>>
C. Tanya and Toys_模拟
查看>>
springboot jar包运行中获取资源文件
查看>>
基于FPGA实现的高速串行交换模块实现方法研究
查看>>
Java Scala获取所有注解的类信息
查看>>
delphi ,安装插件
查看>>
case when then的用法-leetcode交换工资
查看>>
11.28.cookie
查看>>
BeanShell简介
查看>>
python字符串操作
查看>>
不同程序语言的注释和变量要求
查看>>
语言基础(9):static, extern 和 inline
查看>>
邮件和短信验证码
查看>>
(转)Android studio 使用心得(五)—代码混淆和破解apk
查看>>
构建之法阅读笔记03
查看>>