} } } 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'); //这个方法就是在需要调用的地方插入即可!