PHP插件技术-插件钩子(hooks)分析
最近准备做一个开源的个人博客系统,因为在构想中要添加插件功能,所以就研究了一下插件功能的实现方法。
插件的功能按照本人自己的理解就是对已有的程序进行功能方面的添加以及改进,插件要与程序所提供的接口进行连接,然后通过已经连接的接口对程序的数据等等进行修改。
而插件钩子的作用就类似于一个插件接口,插件与程序内相应的钩子进行连接,对程序提供的内容进行修改。
我的插件机制全部是采用面向对象的方式进行架构的,在开始要对插件进行初始化,就是使用一个数组将插件的名称存放起来,以供后续的钩子进行调用。
$plug_config[]=array(
'plug_name'=>'onePlug',
'plug_version'=>'1.01'
);
这个插件的功能我就是想对一段html内容添加一个好看的样式,插件我是放在./root/ext文件夹内,以插件名作为插件文件夹的名称,main.php作为插件的主调用入口。
插件的内部是一个以插件名为类名的Class。
<?php class onePlug{
function __construct(){
global $plug_tem_global; $temarr=explode('<br>',$plug_tem_global); $plug_tem_global='<div style="width:200px;padding:100px 80px;border-radius:200px;margin:100px auto;background-color:#c33;text-align:center;color:#fff;font-family:微软雅黑;">'.implode("<br><br>",$temarr).'</div>'; }
}
这个 global $plug_tem_global; 是使用一个全局变量$plug_tem_global作为传入内容的参数,对它进行修改就相当于对内容进行修改。
在插件机制的主文件中,插件钩子作为一个调用插件的接口,它其实是一个字符串变量,其内部的值就是存放插入当前位置插件的数组的名称
比如说上面插件初始化的数组名称为plug_config,那么此处的插件钩子就是$plug_config,由于要在类的内部对这个变量进行操作,所以使用global将他变成了一个全局变量。
$plug_point_name='plug_config';
global $$plug_point_name;
对于插件的执行,在内部使用了一个循环来执行适用于当前钩子的所有插件
$plug_tem_arr=$$plug_point_name; $plug_num=count($plug_tem_arr);
for($plug_i=0;$plug_i<$plug_num;$plug_i++){
if(isset($plug_tem_arr[$plug_i]['plug_name'])){
$plug_name=$plug_tem_arr[$plug_i]['plug_name'];
$plug_file_address=Root.'ext'.DIRECTORY_SEPARATOR .$plug_name.DIRECTORY_SEPARATOR .'main.php';
if(file_exists($plug_file_address)){
require($plug_file_address);
$plug_tem_obj=new $plug_name();
}
}
}
下面就是我不使用插件与使用插件后的效果对比,哈哈~ 从前有座山……
PHP插件技术-插件钩子(hooks)分析的更多相关文章
- Android Small插件化框架源码分析
Android Small插件化框架源码分析 目录 概述 Small如何使用 插件加载流程 待改进的地方 一.概述 Small是一个写得非常简洁的插件化框架,工程源码位置:https://github ...
- .NET插件技术-应用程序热升级
今天说一说.NET 中的插件技术,即 应用程序热升级.在很多情况下.我们希望用户对应用程序的升级是无感知的,并且尽可能不打断用户操作的. 虽然在Web 或者 WebAPI上,由于多点的存在可以逐个停用 ...
- 【腾讯Bugly干货分享】Android 插件技术实战总结
本文来自于腾讯Bugly公众号(weixinBugly),未经作者同意,请勿转载,原文地址:https://mp.weixin.qq.com/s/1p5Y0f5XdVXN2EZYT0AM_A 前言 安 ...
- Unity时钟定时器插件——Vision Timer源码分析之二
Unity时钟定时器插件——Vision Timer源码分析之二 By D.S.Qiu 尊重他人的劳动,支持原创,转载请注明出处:http.dsqiu.iteye.com 前面的已经介绍了vp_T ...
- Atitit.java的浏览器插件技术 Applet japplet attilax总结
Atitit.java的浏览器插件技术 Applet japplet attilax总结 1. Applet类及各个方法说明 1 2. JApplet类示例 2 3. / 用main方法运行JAp ...
- idea插件篇之java内存分析工具(JProfiler)
前言在运行java的时候有时候想测试云运行时占用内存情况,这时候就需要使用测试工具查看了.在eclipse里面有 Eclipse Memory Analyzer tool(MAT)插件可以测试,而在i ...
- Mybatis 插件使用及源码分析
Mybatis 插件 Mybatis插件主要是通过JDK动态代理实现的,插件可以针对接口中的方法进行代理增强,在Mybatis中比较重要的接口如下: Executor :sql执行器,包含多个实现类, ...
- Pytest权威教程19-编写钩子(Hooks)方法函数
目录 编写钩子(Hooks)函数 钩子函数验证和执行 firstresult: 遇到第一个有效(非None)结果返回 hookwrapper:在其他钩子函数周围执行 钩子(Hooks)函数排序/调用示 ...
- 大文件上传插件webupload插件
版权所有 2009-2018荆门泽优软件有限公司 保留所有权利 官方网站:http://www.ncmem.com/ 产品首页:http://www.ncmem.com/webapp/up6.2/in ...
随机推荐
- js正则表达式之解析——URL的正则表达式
首先,此片文章并不是直接告诉你,url的正则表达式是什么,以及怎么使用这个正则表达式去解析一个URL地址,相信这种问题在网络上已经能找到很多.本文的宗旨在于教你如何理解URL的正则表达式,以达到理解正 ...
- Flex圆角矩形
<?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="h ...
- socat : Some useful commands
http://technostuff.blogspot.com/2008/10/some-useful-socat-commands.html MONDAY, OCTOBER 6, 2008 Some ...
- CSDN问答频道“华章杯”7月排行榜活动开始,丰厚奖品等你拿
CSDN问答频道月度排行榜,是CSDN问答频道从3月开始举办的活动,旨在鼓励更多用户参与提问和解答,创造一个良好的互帮互助氛围,使参与者在问和答的过程中得到技术水平的提升,也希望大家能在技术交流中结交 ...
- 课本[Teb]软件设计
中文名:课本 英文名:Textbook 简称:Teb 一个专注于分享校内课件的软件. 一个课件的整合平台. 发布平台:web>android>ios; 主要功能:预览课件(暂定),搜索课件 ...
- 关于C#中派生类调用基类构造函数的理解
(1)当基类中没有自己编写的构造函数时,派生类默认条用基类的构造函数 (2)当基类中有自己编写的构造函数时,要在基类中添加无参的构造函数 public class MyBaseClass { publ ...
- ORA-01489: result of string concatenation is too long
ORA-01489: result of string concatenation is too long Cause: String concatenation result is more tha ...
- Android游戏框架之基础之AA碰撞系统
AA 碰撞体 就是将所有的物体设置为矩形框进行碰撞计算.下面是代码 /* * Copyright (C) 2010 The Android Open Source Project * * Licens ...
- [Javascript] Promise-based functions should not throw exceptions
Source You can also start a chain of then() method calls via Promise.resolve() and execute the synch ...
- iOS 开发——实用技术Swift篇&Swift 懒加载(lazy)
Swift 懒加载(lazy) 在程序设计中,我们经常会使用 * 懒加载 * ,顾名思义,就是用到的时候再开辟空间,比如iOS开发中的最常用控件UITableView,实现数据源方法的时候,通常我们都 ...