袁来如此的工作笔记
袁来如此的工作笔记
竹杖芒鞋轻胜马,谁怕? 一蓑烟雨任平生。

tp(php)插件(钩子)的简单实现机制

浏览量:147

钩子核心类Hook.php:

    namespace hook;
    class Hook{
        
        static protected $hook = [];
        
        /**
         * 插件注册
         * @param [type] $name   [description]
         * @param [type] $addons [description]
         */
        static public function add($name,$addons){
            self::$hook[$name] = $addons;
        }
        /**
         * 插件执行
         * @param  [type] $name [description]
         * @return [type]       [description]
         */
        static public function run($name){
            if(isset(self::$hook[$name])){
                $method = (new self::$hook[$name]());
                   call_user_func([$method,$name]);
            }
            
        }
    }


简单的插件demo:
    namespace addons\demo;
    class Demo{
        public function registerBefore(){
            echo 'registerBefore'.'</br>';
        }
        public function registerAfter(){
            echo 'registerAfter'.'</br>';
        }    
    }

插件实现的地方
    namespace index\controller;
    use hook\Hook;
    class Index{
        public function index(){
            Hook::run('registerBefore');
            echo '注册完成'.'</br>';
            Hook::run('registerAfter');
            
        }
    }

入口文件index.php
    use index\controller\Index;
    spl_autoload_register('autoload');
    function autoload($name){
        require_once('/'.str_replace('\\','/',$name).'.php');
    }
    //插件注册
    hook\Hook::add('registerBefore','\\addons\\demo\\Demo');
    hook\Hook::add('registerAfter','\\addons\\demo\\Demo');
    //调用
    $index = new Index();
    $index->index();
打赏