插件机制的实现核心类

转载 2016年10月14日 09:36:02
<?php
/**
*
* 插件机制的实现核心类
*/
class PluginManager
{
    /**
     * 监听已注册的插件
     *
     * @access private
     * @var array
     */
    private $_listeners = array();
     /**
     * 构造函数
     *
     * @access public
     * @return void
     */
    public function __construct()
    {
        #这里$plugin数组包含我们获取已经由用户激活的插件信息
     #为演示方便,我们假定$plugin中至少包含
     #$plugin = array(
        #    'name' => '插件名称',
        #    'directory'=>'插件安装目录'
        #);
        $plugins = get_active_plugins();#这个函数请自行实现
        if($plugins)
        {
            foreach($plugins as $plugin)
            {//假定每个插件文件夹中包含一个actions.php文件,它是插件的具体实现
                if (@file_exists(STPATH .'plugins/'.$plugin['directory'].'/actions.php'))
                {
                    include_once(STPATH .'plugins/'.$plugin['directory'].'/actions.php');
                    $class = $plugin['name'].'_actions';
                    if (class_exists($class))
                    {
                        //初始化所有插件
                        new $class($this);
                    }
                }
            }
        }
        #此处做些日志记录方面的东西
    }


    /**
     * 注册需要监听的插件方法(钩子)
     *
     * @param string $hook
     * @param object $reference
     * @param string $method
     */
    function register($hook, &$reference, $method)
    {
        //获取插件要实现的方法
        $key = get_class($reference).'->'.$method;
        //将插件的引用连同方法push进监听数组中
        $this->_listeners[$hook][$key] = array(&$reference, $method);
        #此处做些日志记录方面的东西
    }
    /**
     * 触发一个钩子
     *
     * @param string $hook 钩子的名称
     * @param mixed $data 钩子的入参
     *    @return mixed
     */
    function trigger($hook, $data='')
    {
        $result = '';
        //查看要实现的钩子,是否在监听数组之中
        if (isset($this->_listeners[$hook]) && is_array($this->_listeners[$hook]) && count($this->_listeners[$hook]) > 0)
        {
            // 循环调用开始
            foreach ($this->_listeners[$hook] as $listener)
            {
                // 取出插件对象的引用和方法
                $class =& $listener[0];
                $method = $listener[1];
                if(method_exists($class,$method))
                {
                    // 动态调用插件的方法
                    $result .= $class->$method($data);
                }
            }
        }
        #此处做些日志记录方面的东西
        return $result;
    }
}

Spring(2)--Spring核心机制:依赖注入

Spring的核心机制就是Ioc(控制反转)容器,IoC的另外一个称呼就是依赖注入(DI),通过依赖注入,JavaEE应用中的各种组件不需要以硬编码的方法进行耦合,当一个Java实例需要其他Java实...
  • an_2016
  • an_2016
  • 2016年08月05日 00:08
  • 1347

核心java系统——反射机制

反射的简介反射是java中一种很强大的工具,能够动态分析java的类的能力,在运行状态中,对于任意一个类,通过反射都能知道这个类的属性和方法。这种动态获取的信息以及动态调用对象的方法的功能称为Java...
  • xhwwc110
  • xhwwc110
  • 2015年11月10日 21:56
  • 677

Java入门-核心机制

学习Java基础的视频J2SE,用Java开发项目,对Java的基础知识必须有一个清楚的了解。首先我们应该了解Java的的机制,Java有两种核心机制。     1.Java虚拟机(Java Vir...
  • u013045552
  • u013045552
  • 2015年09月03日 21:09
  • 1237

java核心机制之JVM

核心机制之JVM Java虚拟机可以理解成一个以字节码为机器指令的CPU 对于不同的运行平台,有不同的虚拟机 Java虚拟机机制屏蔽了底层运行平台的差别,能够很好的实现跨平台...
  • itlwc
  • itlwc
  • 2016年06月13日 19:27
  • 899

java核心机制一些知识

1.ORM(Object Relationship Mapping) 对象关系映射 2.动态语言:程序运行时,可以改变程序结构或变量类型,如Python、ruby等 但java不是动态语言,只...
  • csy_insist
  • csy_insist
  • 2016年09月21日 10:02
  • 415

struts2的核心机制学习

之前写过一篇关于struts2的工作流程的博文因为本人能力又想而且第一次写可能写的比较乱、不好懂,希望大家可以原谅。这次打算再次深入学习struts2的核心机制,更细化struts2的理解。首先还是给...
  • JY_He
  • JY_He
  • 2016年08月10日 10:00
  • 584

MFC的六大核心机制概述

这一篇主要讲解一下MFC中的6个主要的关键技术,整个Application Framework其实从本质上来说都是建立在这6个关键技术上的。所以能够了解它们的原理对理解MFC整个框架和程序设计有非常大...
  • cytj129
  • cytj129
  • 2015年04月24日 17:39
  • 1305

spring核心机制

  核心机制是以BeanFactory为基础,管理bean与benn之间的依赖的.Spring以bean防是组织管理java应用中的各组件,组件之间的依赖关系松耦合运行良好.这依赖与spring德核心...
  • bingouu
  • bingouu
  • 2008年03月13日 10:43
  • 2565

Mybatis核心类生命周期和管理

Mybatis的核心类及生命周期: 1、SqlSessionFactoryBuilding 这个类可以被实例化、使用和丢弃。一但创建了SqlSessionFactory后,这个类就不需要存在 了,...
  • qq1134550437
  • qq1134550437
  • 2016年07月19日 23:24
  • 3199

MFC六大核心机制之三:动态创建

MFC中很多地方都使用了动态创建技术。动态创建就是在程序运行时创建指定类的对象。例如MFC的单文档程序中,文档模板类的对象就动态创建了框架窗口对象、文档对象和视图对象。动态创建技术对于希望了解MFC底...
  • u012581732
  • u012581732
  • 2014年12月06日 12:50
  • 992
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:插件机制的实现核心类
举报原因:
原因补充:

(最多只允许输入30个字)