博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
中间件实现原理
阅读量:6462 次
发布时间:2019-06-23

本文共 1737 字,大约阅读时间需要 5 分钟。

ThinkPHP5.1x的中间件,其核心还是闭包函数的应用,来实现“责任链”模式:

 

模拟代码:

'; }}//中间件class Before1 { public function handle($request, Closure $next) { echo 'before1
'; //业务逻辑,注意前置与后置中间件业务逻辑代码的位置 return $next($request); }}//中间件class Before2 { public function handle($request, Closure $next) { echo 'before2
'; return $next($request); }}//中间件class After1 { public function handle($request, Closure $next) { $response = $next($request); echo 'after1
'; //业务逻辑,注意前置与后置中间件业务逻辑代码的位置 return $response; }}//中间件class After2 { public function handle($request, Closure $next) { $response = $next($request); echo 'after2
'; return $response; }}class Middleware { public static $queue; //中间件队列 public static function init() { //模拟的中间件,数量任意添加 self::$queue[] = [[After1::class, 'handle'], null]; self::$queue[] = [[After2::class, 'handle'], null]; self::$queue[] = [[Before1::class, 'handle'], null]; self::$queue[] = [[Before2::class, 'handle'], null]; //模拟的控制器 self::$queue[] = [[Controller::class, 'index'], null]; } //调用中间件 public static function dispatch($request) { call_user_func(self::resolve(), $request); } //返回闭包函数 public static function resolve(){ return function($request){ $middleware = array_shift(self::$queue); if ($middleware != null) { list($call, $param) = $middleware; call_user_func_array($call, [$request, self::resolve()]); //执行中间件 } }; }}$request = "模拟的request对象";Middleware::init();Middleware::dispatch($request);

转载于:https://www.cnblogs.com/liliuguang/p/10856692.html

你可能感兴趣的文章
c语言 蛇形矩阵,蛇形矩阵输出是要怎么写代码,感觉没有眉目啊,大佬能说一下思想吗...
查看>>
国二考vb和c语言,全国计算机二级《VB》练习题及答案(2)
查看>>
[原创]需求工程思维导图
查看>>
CoreApiHtml.sql -2<-- (INVItemCt115h.sql ) Note: 223702.1
查看>>
MVC后台创建Json(List),前台接受并循环读取
查看>>
hdu 1072 Nightmare (广搜)
查看>>
还能再山寨点吗?——记发现的山寨网站经历
查看>>
ecshop将属性价格改为直接价格,而非加的价格
查看>>
oracle创建数据库
查看>>
mongodb与mysql命令对比
查看>>
libpq程序例子
查看>>
Tree通用的系列方法列表-treepanel
查看>>
ios backgroundColor
查看>>
windows查看端口占用命令
查看>>
VS2008--无法找到“XXX.exe”的调试信息,或者调试信息不匹配
查看>>
S5PV210 看门狗定时和复位
查看>>
2440裸机驱动之PWM开发
查看>>
C# GUID
查看>>
监听Sms.Content_URI而不是Sms.Inbox.CONTENT_URI
查看>>
昨天面试新浪 java试题
查看>>