下面有注释了,直接贴代码吧
/** * 插件钩子类 * [email protected] * 2018-11-24 * 钩子使用方法 //引用命名空间 use Ay\auto\Hook; //添加钩子 Hook::add('ceshi',function(){ echo '挂载点1 '; }); //运行钩子 Hook::listen('ceshi'); */ namespace Ay\Auto; // 命名空间 // 插件类 class Hook{ /** * Hook初始化 */ function __construct() { $dir = __DIR__ . "/plugin/"; // 获取全部插件 if(!is_dir($dir)){ $pluginList = []; }else{ $pluginList=scandir($dir); } foreach ($pluginList as $k => $v) { if ($v=='.' || $v=='..') { unset($pluginList[$k]); } $pluginList[$k] = $dir.$v; } //print_r($pluginList); foreach($pluginList as $val){ if(!is_file($val."/config.php")) break; $config = include $val."/config.php"; if($config['status'] == 0) break; is_file($val."/add.php") && include_once $val . "/add.php"; } } /** * 注册添加插件 * @param $name 钩子名称 * @param $func 钩子使用的方法 */ public static function add($name,$func){ $GLOBALS['hookList'][$name][]=$func; } /** * 监听插件 * @param $name 钩子名称 * @param null $params 钩子方法参数 * @return mixed|void */ public static function listen($name,$params=null){ if(empty($GLOBALS['hookList'][$name])) { //钩子为空 return; } foreach ($GLOBALS['hookList'][$name] as $k => $v){ return call_user_func($v,$params); } } /** * listen的别名方法 * @param $name * @param null $params * @return mixed|void */ public static function run($name,$params=null){ return self::listen($name,$params); } }
转载请注明:七彩悠悠博客 | 心悠悠 情悠悠 » 简单的插件钩子系统