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的特性

相关推荐
freedom_1024_11 分钟前
红黑树底层原理拆解
开发语言·数据结构·b树
liu****28 分钟前
3.链表讲解
c语言·开发语言·数据结构·算法·链表
小灰灰搞电子1 小时前
Rust 动态分发(dyn Trait)详解
开发语言·后端·rust
第二只羽毛1 小时前
C++ 高性能编程要点
大数据·开发语言·c++·算法
老华带你飞1 小时前
旅游|基于Java旅游信息系统(源码+数据库+文档)
java·开发语言·数据库·vue.js·spring boot·旅游
真正的醒悟1 小时前
202503-经验之道
服务器·网络·php
爱学习的梵高先生1 小时前
C++:基础知识
开发语言·c++·算法
oioihoii2 小时前
C++对象生命周期与析构顺序深度解析
java·开发语言·c++
IMPYLH2 小时前
Lua 的 tonumber 函数
开发语言·笔记·后端·junit·游戏引擎·lua
It's now2 小时前
BeanRegistrar 的企业级应用场景及最佳实践
java·开发语言·spring