luwz
中间件的实现原理

运用 array_reduce 以及 call_user_func 实现

interface Middleware
{
    public static function handle(Closure $next);
}

class VerfiyCsrfToekn implements Milldeware{    
    public static function handle(Closure $next)    {        
        echo \'验证csrf Token <br>\';        
        $next();    
    }
}

class VerfiyAuth implements Milldeware{
    public static function handle(Closure $next)    {        
        echo \'验证是否登录 <br>\';        
        $next();    
    }
}

class SetCookie implements Milldeware{    
    public static function handle(Closure $next)    {        
        $next();        
        echo \'设置cookie信息!\';    
    }
}

$handle = function () {    
    echo \'当前要执行的程序!\';
};

$pipe_arr = [ \'VerfiyCsrfToekn\', \'VerfiyAuth\', \'SetCookie\', ];

$callback = array_reduce($pipe_arr, function ($stack, $pipe) {
    return function () use ($stack, $pipe) {
        return $pipe::handle($stack);
    };
}, $handle);

call_user_func($callback);

分类:

技术点:

相关文章: