Php - 在类中加载插件 - 最好的方法

时间:2015-07-10 12:35:08

标签: php

我有类load.php来处理我的应用程序中的所有内容

require_once('app/load.php'); 
$micro = New load($mainroute);
$micro->init_plugins();

在_construnc中的类中有插件属性:

$this->plugins = json_decode(file_get_contents(ABSPATH.'micro/'.ROOTPATH.'config/plugins.json'), true); 

并且有方法init_plugins():

public function init_plugins() {
    $plugins = $this - > plugins;
    $micro = $this;
    foreach($plugins as $plugin) {
        if ($plugin['active'] == true) {
            include('plugins/'.$plugin['name'].'.php');
        }
    }
}

有示例插件:

require(ABSPATH.'vendor/autoload.php');

use DebugBar\StandardDebugBar;

$debugbar = new StandardDebugBar();
$debugbarRenderer = $debugbar - > getJavascriptRenderer();

$micro - > add_hook('head', 'debug_bar_render_head');
$micro - > add_hook('body_end', 'debug_bar_shutdown');
$micro - > add_hook('body_end', 'debug_bar_render_body');

function debug_bar_render_head() {
    global $debugbarRenderer;
    echo $debugbarRenderer - > renderHead();
}

function debug_bar_render_body() {
    global $debugbarRenderer;
    echo $debugbarRenderer - > render();
}

function debug_bar_shutdown() {
    global $debugbar;
    global $micro;
    $debugbar["messages"] - > addMessage("memory:  ".memory_get_usage());
    $debugbar["messages"] - > addMessage("time: ".$micro - > endtime());
}

首先,这不起作用,我需要信息我错了吗?

我希望一切都在类加载,处理包括钩子在内的所有事情:

public function add_hook($hook, $function, $parameters) {
       array_push($this - > micro_hooks[$hook], array('function' = > $function, 'parameters' = > $parameters));
   }

public function do_hook($hook) {
       foreach($this - > micro_hooks[$hook] as $action) {
           call_user_func_array($action['function'], $action['parameters']);
       }
   }

public function dump_hooks() {
       var_dump($this - > micro_hooks);
   }

我想要的流程是:

     $micro = New load($routes);
     $micro-> init_something();
     $micro-> init_plugins();

我希望插件创建者已经拥有$ micro对象并在那里添加钩子。

我的问题是:

  1. 最好的方法
  2. 如果插件中有其他类,如何避免全局变量?
  3. 如何让它发挥作用?它在我从类中移出init_plugins()方法时有效,但我想要处理所有类的操作

0 个答案:

没有答案