15.6. Plugin Hook 设计与实现
插件系统分为:
插件管理平台
插件探测
插件注册
插件调用
插件注销
15.6.1. 插件管理平台
15.6.1. 插件管理平台
<?php final class Plugin{private $plugins = null;private $directory = 'plugins';private $path = null;public function __construct(){$this->path = $this->directory.'/';}public function autoload(){$interfaces = scandir($this->directory);unset($interfaces[0]);unset($interfaces[1]);foreach($interfaces as $interface){//load all of the plugins$file = $this->path . $interface;if (@file_exists($file)){include_once($file);$class = basename($interface, ".php");if (class_exists($class)){$this->$class = new $class($this);$vars = get_class_vars($class);$entity['name'] = $vars['name'];$entity['description'] = $vars['description'];$entity['author'] = $vars['author'];$entity['class'] = $class;$entity['methods'] = get_class_methods($class);$this->plugins[$class] = $entity;}}}}public function load($plugin){$file = $this->path . $plugin . '.php';if (@file_exists($file)){include_once($file);$class = $plugin;if (class_exists($class)){$this->$class = new $class($this);$vars = get_class_vars($class);$entity['name'] = $vars['name'];$entity['description'] = $vars['description'];$entity['author'] = $vars['author'];$entity['class'] = $class;$entity['methods'] = get_class_methods($class);$this->plugins[$class] = $entity;}}}public function show(){print_r($this->plugins);} }
15.6.2. 接口定义
<?php interface iPlugin {public function test(); }
15.6.3. 插件
<?php final class demo implements iPlugin{public static $author = 'Neo Chen<openunix@163.com>';public static $name = 'Demo';public static $description = 'Demo Simple';public function __construct(){}public function test(){echo 'Hello world!!!';} }
15.6.4. 测试
<?php function __autoload($class_name) {require_once('library/'.$class_name . '.php'); }//include_once('library/Plugin.php'); $plugin = new Plugin(); echo '============================='; $plugin->load('demo'); $plugin->demo->test(); echo '============================='; $plugin->autoload(); $plugin->show();
原文出处:Netkiller 系列 手札
本文作者:陈景峯
转载请与作者联系,同时请务必标明文章原始出处和作者信息及本声明。
15.6. Plugin Hook 设计与实现相关推荐
- 15个著名的设计心理学原理以及在设计中的应用
你是否有在听别人说某某原理法则时一脸懵B的时候?明明知道这个原理却说不出它的名字?不要紧,本文就来介绍与人机交互设计相关的15个常见的设计心理学原理,帮助你了解产品的定位,需求目的和交互逻辑,洞悉用户 ...
- (15)FPGA模块化设计原则
(15)FPGA模块化设计原则 1.1 目录 1)目录 2)FPGA简介 3)Verilog HDL简介 4)FPGA模块化设计原则 5)结语 1.2 FPGA简介 FPGA(Field Progra ...
- HTML5+CSS大作业——彭于晏明星(15页) _网页设计期末作业
HTML5+CSS大作业--彭于晏明星(15页) _网页设计期末作业 常见网页设计作业题材有 个人. 美食. 公司. 学校. 旅游. 电商. 宠物. 电器. 茶叶. 家居. 酒店. 舞蹈. 动漫. 明 ...
- 回顾艾维在苹果的15款最经典设计:最后一个特别大
回顾艾维在苹果的15款最经典设计:最后一个特别大 网易科技讯 6月28日消息,据外媒报道,苹果首席设计官乔尼·艾维(Jony Ive)宣布,他将于今年晚些时候离开公司,并将成立自己的设计公司,苹果将是 ...
- HTML5期末大作业:关于题介绍的网页作业——我的家乡新密 (15页) 含课程设计论文HTML+CSS+JavaScript 学生DW网页设计作业成品 web课程设计网页规划与设计
HTML5期末大作业:关于家乡介绍的网页设计--我的家乡新密 (15页) 含课程设计论文HTML+CSS+JavaScript 学生DW网页设计作业成品 web课程设计网页规划与设计 计算机毕设网页设 ...
- 积木Sketch Plugin:设计同学的贴心搭档
多年来,美团外卖一直在高速增长,但整个客户端的UI组件一直没有得到很好的统一.而在开发过程中因UI缺乏同一的标准导致各种问题凸显,积木插件Sketch Plugin应运而生.外卖技术团队将其打造成为U ...
- AD(altium designer)15原理图与PCB设计教程(四)——电路原理图设计进阶
目录 SCH Inspector面板 SCH Filter面板 "SCH Filter"面板简介 "Query Helper"对话框 "SCH Fil ...
- 【案例练习】15—27个网页设计的 HTML 时间线
来源 | https://medium.com/@niemvuilaptrinh/27-html-timeline-for-web-design-979b8e5d1c05 今天这篇文章,我跟大家分享2 ...
- mybatis 原理_Mybatis大揭秘:plugin插件设计原理
点击上方"后端技术精选",选择"置顶公众号" 技术文章第一时间送达! 作者:祖大俊 my.oschina.net/zudajun/blog/738973 大多数 ...
最新文章
- CornerNet: 成对关键点物体检测 | CSDN博文精选
- iOS开源项目周报0316
- Python 一次for遍历多个列表及遍历时获取index
- 十六、去年写的pandas使用方法梳理,2020年5月13日整理
- android textView设置粗体
- rt5350 中断初始化
- Python GIL 系列之再谈Python的GIL
- qmail 反垃圾邮件
- 哪种编程语言好找工作_哪种编程语言可以工作? 为了周末?
- sqlserver 按日、周、月统计方法
- Calendar中add()和roll()函数的用法
- 新一代天气雷达信息共享平台
- 打印机服务器属性纸张自动改,“打印机设置自定义纸张”的解决方案
- Traceback (most recent call last): 报错
- 微型计算机原理与接口技术第三版答案
- 索尔维会议记录软件测试,科学史上的今天:10/30|索尔维会议创立,史上最强科学梦幻明星队...
- Vba Excel 自动分级
- 25个最适合摄影师的WordPress主题(2020)
- 离散数学实验3 平面图判定及对偶图的求解 C++
- 知识蒸馏之自蒸馏【附代码】