php插件化开发_编程反射机制

Php (59) 2023-03-24 21:02

大家好,我是编程小6,很高兴遇见你,有问题可以及时留言哦。

在传统的开发中,一个系统的所有功能都是揉在一起的,相互牵连,不可分割,要用就必须一起用,要关闭也必须一起关闭。对于一些核心的必须的功能,这种操作可能还没有太大关系,但对于一些实验性的功能,这种模式就有点不够灵活了。

那有没有一种方案,可以实现某一功能的快速开启及快速关闭,即我想使用就在后台操作某一按钮安装起来,不想使用就操作另一按钮卸载掉,并且该功能的安装卸载不会影响其他核心功能呢?答案:使用插件机制。

什么是插件

插件,顾名思义就是可插拔的物件。在PHP中,插件也是用于扩展系统功能的一些独立的可安装可卸载的“组件”。

PHP插件的特点

PHP插件的定位是用于实现某些简单的显示及数据处理的功能扩展,如文章评论。插件的开启关闭,不会影响原有系统。

PHP插件的几个要素

根据插件的定位,一个完整的PHP插件一般包含以下几个要素:

  1. 钩子
  2. 插件主体
  3. 配置后台

1、钩子

钩子就是系统中的一些标签位,用来挂载插件或其他程序。当程序执行到某一钩子时,钩子就会执行挂载到其上的插件或程序。

2、插件主体

这是插件的核心内容,包括插件的入口文件,控制器、模型、视图等。

3、配置后台

这是管理插件的地方,一个插件的安装、卸载,开启、关闭,及其他基本信息的设置都是由这里控制。

PHP插件的开发流程

根据上面介绍的PHP插件的几个要素,PHP插件的开发大致可以分为创建钩子—〉挂载插件—〉开发插件—〉安装卸载几个步骤。

下面以onethink的插件系统为例来介绍PHP插件的开发流程:

1、创建钩子

PHP插件的使用是通过钩子来完成的,所谓钩子其实就是一个标签位,需要提前埋在程序中。当程序运行到此标签位时,程序就会检测当前标签位是否有挂载插件,如果有则执行插件操作。

设置钩子标签位:documentDetailAfter

php插件化开发_编程反射机制_https://bianchenghao6.com/blog_Php_第1张

2、挂载插件

php插件化开发_编程反射机制_https://bianchenghao6.com/blog_Php_第2张

3、创建插件

创建插件主要是创建插件的入口文件

php插件化开发_编程反射机制_https://bianchenghao6.com/blog_Php_第3张

插件入口文件主要包含info属性,install方法,unstall方法和钩子方法。其中,info属性定义了插件的基本信息,如插件的名字、标题、描述、作者等;install方法用来判断是否可以安装插件,直接返回布尔值;unstall方法用来判断是否可以卸载插件,也是直接返回布尔值;而钩子方法则直接执行插件的功能,是插件的核心部分。

4、安装、卸载插件

安装、卸载插件主要是进行一些静态文件位置的迁移,数据表的创建及删除。另外,这涉及到几个基础的数据表,钩子表、插件表和钩子插件对应表,如下:

php插件化开发_编程反射机制_https://bianchenghao6.com/blog_Php_第4张

安装卸载插件实际就是在这几张表中添加记录和删除记录,如下是onethink中插件安装和卸载的操作:

php插件化开发_编程反射机制_https://bianchenghao6.com/blog_Php_第5张

安装插件

从图中我们可以看到,所谓安装,卸载的确是通过在数据库中添加记录和删除记录实现的。

php插件化开发_编程反射机制_https://bianchenghao6.com/blog_Php_第6张

卸载插件

不过,对于那些需要使用数据库的插件而言,有一点不同,那就是这些插件需要定义数据表创建的SQL和数据表删除的SQL,如图中install.sql和unstall.sql

当我们完成插件的安装之后,我们就可以使用插件了。

下面附上onethink中关于插件开发的效果图

php插件化开发_编程反射机制_https://bianchenghao6.com/blog_Php_第7张

php插件化开发_编程反射机制_https://bianchenghao6.com/blog_Php_第8张

php插件化开发_编程反射机制_https://bianchenghao6.com/blog_Php_第9张

php插件化开发_编程反射机制_https://bianchenghao6.com/blog_Php_第10张


本文有“编码小哥”原创,转载请注明出处

发表回复