Example #1
0
File: index.php Project: xuen/logs
            }
        }
    }
    function register($hook, &$reference, $method)
    {
        $key = get_class($reference) . '->' . $method;
        $this->_listeners[$hook][$key] = array(&$reference, $method);
    }
    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;
    }
}
$b = new PluginManager();
//上面是NEW一个插件管理类!
$b->trigger("elin", 'http://blog.MicXP.com');
//这个方法就是在需要调用的地方插入即可!