下面有注释了,直接贴代码吧
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 | /** * 插件钩子类 * ay@7cuu.com * 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 ); } } |
转载请注明:七彩悠悠博客 | 心悠悠 情悠悠 » 简单的插件钩子系统