PHP教程:插件机制在PHP中实现方案(2)_PHP技巧_黑客防线网安服务器维护基地--Powered by WWW.RONGSEN.COM.CN

PHP教程:插件机制在PHP中实现方案(2)

作者:黑客防线网安PHP教程基地 来源:黑客防线网安PHP教程基地 浏览次数:0

本篇关键词:方案实现插件教程
黑客防线网安网讯:  WebjxCom提示:PHP中插件机制的一种实现方案.    原理讲了一大堆,下面看看我的实现方案:    插件经理PluginManager类:    <?    /**    *STBLOGPluginManagerCl...
  WebjxCom提示:PHP中插件机制的一种实现方案.
  
  原理讲了一大堆下面看看我的实现方案:
  
  插件经理PluginManager类:
  
  <?
  
  /**
  
  *STBLOGPluginManagerClass
  
  *
  
  *插件机制的实现核心类
  
  *
  
  *@packageSTBLOG
  
  *@subpackageLibraries
  
  *@categoryLibraries
  
  *@authorSaturn
  
  *@linkhttp://www.cnsaturn.com/
  
  */
  
  classPluginManager
  
  {
  
  /**
  
  *监听已注册的插件
  
  *
  
  *@accessprivate
  
  *@vararray
  
  */
  
  private$_listeners=array();
  
  /**
  
  *构造函数
  
  *
  
  *@accesspublic
  
  *@returnvoid
  
  */
  
  publicfunction__construct()
  
  {
  
  #这里$plugin数组包含我们获取已经由用户激活的插件信息
  
  #为演示方便我们假定$plugin中至少包含
  
  #$plugin=array(
  
  #'name'=>'插件名称',
  
  #'directory'=>'插件安装目录'
  
  #);
  
  $plugins=get_active_plugins();#这个函数请自行实现
  
  if($plugins)
  
  {
  
  foreach($pluginsas$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);
  
  }
  
  }
  
  }
  
  }
  
  #此处做些日志记录方面的东西
  
  }
  
  /**
  
  *注册需要监听的插件方法(钩子)
  
  *
  
  *@paramstring$hook
  
  *@paramobject$reference
  
  *@paramstring$method
  
  */
  
  functionregister($hook,&$reference,$method)
  
  {
  
  //获取插件要实现的方法
  
  $key=get_class($reference).'->'.$method;
  
  //将插件的引用连同方法push进监听数组中
  
  $this->_listeners[$hook][$key]=array(&$reference,$method);
  
  #此处做些日志记录方面的东西
  
  }
  
  /**
  
  *触发一个钩子
  
  *
  
  *@paramstring$hook钩子的名称
  
  *@parammixed$data钩子的入参
  
  *@returnmixed
  
  */
  
  functiontrigger($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;
  
  }
  
  }
  
  ?>
  
  以上代码加上注释不超过100行,就完成了整个插件机制的核心需要再次说明的是,你必须将它设置成全局类,在所有需要用到插件的地方,优先加载用#注释的地方是你需要自行完成的部分,包括插件的获取和日志记录等等。
  
  
    黑客防线网安服务器维护方案本篇连接:http://www.rongsen.com.cn/show-17600-1.html
网站维护教程更新时间:2012-09-21 05:22:04  【打印此页】  【关闭
我要申请本站N点 | 黑客防线官网 |  
专业服务器维护及网站维护手工安全搭建环境,网站安全加固服务。黑客防线网安服务器维护基地招商进行中!QQ:29769479

footer  footer  footer  footer