插件系统分为:

插件管理平台

插件探测

插件注册

插件调用

插件注销

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 设计与实现相关推荐

  1. 15个著名的设计心理学原理以及在设计中的应用

    你是否有在听别人说某某原理法则时一脸懵B的时候?明明知道这个原理却说不出它的名字?不要紧,本文就来介绍与人机交互设计相关的15个常见的设计心理学原理,帮助你了解产品的定位,需求目的和交互逻辑,洞悉用户 ...

  2. (15)FPGA模块化设计原则

    (15)FPGA模块化设计原则 1.1 目录 1)目录 2)FPGA简介 3)Verilog HDL简介 4)FPGA模块化设计原则 5)结语 1.2 FPGA简介 FPGA(Field Progra ...

  3. HTML5+CSS大作业——彭于晏明星(15页) _网页设计期末作业

    HTML5+CSS大作业--彭于晏明星(15页) _网页设计期末作业 常见网页设计作业题材有 个人. 美食. 公司. 学校. 旅游. 电商. 宠物. 电器. 茶叶. 家居. 酒店. 舞蹈. 动漫. 明 ...

  4. 回顾艾维在苹果的15款最经典设计:最后一个特别大

    回顾艾维在苹果的15款最经典设计:最后一个特别大 网易科技讯 6月28日消息,据外媒报道,苹果首席设计官乔尼·艾维(Jony Ive)宣布,他将于今年晚些时候离开公司,并将成立自己的设计公司,苹果将是 ...

  5. HTML5期末大作业:关于题介绍的网页作业——我的家乡新密 (15页) 含课程设计论文HTML+CSS+JavaScript 学生DW网页设计作业成品 web课程设计网页规划与设计

    HTML5期末大作业:关于家乡介绍的网页设计--我的家乡新密 (15页) 含课程设计论文HTML+CSS+JavaScript 学生DW网页设计作业成品 web课程设计网页规划与设计 计算机毕设网页设 ...

  6. 积木Sketch Plugin:设计同学的贴心搭档

    多年来,美团外卖一直在高速增长,但整个客户端的UI组件一直没有得到很好的统一.而在开发过程中因UI缺乏同一的标准导致各种问题凸显,积木插件Sketch Plugin应运而生.外卖技术团队将其打造成为U ...

  7. AD(altium designer)15原理图与PCB设计教程(四)——电路原理图设计进阶

    目录 SCH Inspector面板 SCH Filter面板 "SCH Filter"面板简介 "Query Helper"对话框 "SCH Fil ...

  8. 【案例练习】15—27个网页设计的 HTML 时间线

    来源 | https://medium.com/@niemvuilaptrinh/27-html-timeline-for-web-design-979b8e5d1c05 今天这篇文章,我跟大家分享2 ...

  9. mybatis 原理_Mybatis大揭秘:plugin插件设计原理

    点击上方"后端技术精选",选择"置顶公众号" 技术文章第一时间送达! 作者:祖大俊 my.oschina.net/zudajun/blog/738973 大多数 ...

最新文章

  1. CornerNet: 成对关键点物体检测 | CSDN博文精选
  2. iOS开源项目周报0316
  3. Python 一次for遍历多个列表及遍历时获取index
  4. 十六、去年写的pandas使用方法梳理,2020年5月13日整理
  5. android textView设置粗体
  6. rt5350 中断初始化
  7. Python GIL 系列之再谈Python的GIL
  8. qmail 反垃圾邮件
  9. 哪种编程语言好找工作_哪种编程语言可以工作? 为了周末?
  10. sqlserver 按日、周、月统计方法
  11. Calendar中add()和roll()函数的用法
  12. 新一代天气雷达信息共享平台
  13. 打印机服务器属性纸张自动改,“打印机设置自定义纸张”的解决方案
  14. Traceback (most recent call last): 报错
  15. 微型计算机原理与接口技术第三版答案
  16. 索尔维会议记录软件测试,科学史上的今天:10/30|索尔维会议创立,史上最强科学梦幻明星队...
  17. Vba Excel 自动分级
  18. 25个最适合摄影师的WordPress主题(2020)
  19. 离散数学实验3 平面图判定及对偶图的求解 C++
  20. 知识蒸馏之自蒸馏【附代码】

热门文章

  1. c# Winform 开发分屏显示应用程序
  2. 支持拼音检索的TextBox扩展控件-使用
  3. 技术篇-HBase Coprocessor 的实现与应用
  4. Manage Attachment feature
  5. CS224n研究热点11 深度强化学习用于对话生成
  6. 18Python标准库系列之logging模块
  7. GPUImage使用之stillCamera多滤镜
  8. 用人话解释比特币原理
  9. 怎么把截屏的一部分内容涂掉_电脑怎么录屏?录屏软件的使用技巧
  10. 集成学习-蒸汽量预测案例