php之框架底层中间件模式开发实现、array_reduce的应用

众所周知php框架的中间件核心是通过array_reduce实现的

php之框架中间件模式开发实现、array_reduce的应用

1.先写个测试用例看一下函数的特性

php 复制代码
<?php
	function kernal($a,$b)
	{
		return $a . "  and  " . $b;
	}
	$array = [1,2,3];
	print_r(array_reduce($array, "kernal", "[Initial]")); 
	//[Initial]  and  1  and  2  and  3

?>

可以看出来,顺序是连贯的

参数传入是 initial,1,2,3

但是他并不是执行了多个auth函数,反而更像是字符串的连接方式

"inital"."1"."2"."3"把结果连成了一串

2.根据执行特性实现中间件

php 复制代码
<?php
	//一次请求方法,next相当于下一个中间件
	function baseMiddle($request,$next){
		$request .= "前置1";
		$res = $next($request);
		echo  "后置1"."\r\n";
		return $res;
	}
	function kernal($next,$handler)
	{
		return function ($request) use ($handler, $next) {
				echo "前置01|".$handler."\r\n";
				$res = $handler($request, $next);
				echo  "后置01|".$handler."\r\n";
				return $res;
            };
	}
	function middleClass1($request,$next){
		$request .= "前置2";
		$res = $next($request);
		echo   "后置2"."\r\n";
		return $res;
	}
	function middleClass2($request,$next){
		$request .= "前置3";
		$res = $next($request);
		echo   "后置3"."\r\n";
		return $res;
	}
	//这是一个存放中间件方法的数组
	$array = ["baseMiddle","middleClass1","middleClass2"];
	$handler = array_reduce(array_reverse($array), "kernal", function($response){ return $response;}); 
	$response = $handler("begin");
	var_dump($response);
	/**
	前置01|baseMiddle
	前置1
	前置01|middleClass1
	前置2
	前置01|middleClass2
	前置3
	后置3
	后置01|middleClass2
	后置2
	后置01|middleClass1
	后置1
	后置01|baseMiddle
	string(26) "begin前置1前置2前置3"
	**/
?>

根据输出结果我们可以看到代码的执行顺序,更好的了解array_reduce的特性

相关推荐
“AI国潮设计-小江”6 分钟前
《【AIGC实战】Python+SDXL批量生成“猫咪英歌舞蛋挞”IP,附保持角色一致性的代码逻辑》
开发语言·人工智能·python·prompt·aigc
坤坤子吖22 分钟前
Linux 线程概念与控制——线程创建、退出与等待
linux·开发语言·c++·笔记·学习
薛一半22 分钟前
Redux实战:组件状态管理全解析
开发语言·前端·javascript·react.js
weixin_3077791327 分钟前
C++代码实现MATLAB中的fitnlm函数功能
开发语言·c++·算法·matlab
白帽攻防录9 小时前
SRC 挖洞:PostScript 打印机驱动双 RCE,打印服务器怎么变成内网跳板
开发语言·网络安全·php·内网安全
十年Java程序媛9 小时前
Java枚举Enum完整教程|替代静态常量,开发与面试要点
java·开发语言·spring boot·后端·面试
2603_965148119 小时前
电商选品调研:通过关键词搜索API获取市场热销商品,结合商品详情API分析竞品卖点与定价
开发语言·数据库·人工智能·python·信息可视化
xixiaoyunya10 小时前
Python 异步编程入门:用 asyncio 轻松实现并发任务
开发语言·python·php
学逆向的10 小时前
C 循环结构的执行效率分析
c语言·开发语言·数据结构·网络安全