当前位置: 首页 > news >正文

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

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

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

    • 1.先写个测试用例看一下函数的特性
    • 2.根据执行特性实现中间件

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

<?phpfunction 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//一次请求方法,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|baseMiddlestring(26) "begin前置1前置2前置3"**/
?>

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

http://www.lryc.cn/news/342431.html

相关文章:

  • fabric搭建生产网络
  • 聊聊 ASP.NET Core 中间件(二):中间件和筛选器的区别
  • Nginx配置Https缺少SSL模块
  • 超详细——集成学习——Adaboost实现多分类——附代码
  • 串口通信标准RS232 RS485 RS422的区别
  • jdk环境安装
  • QT+网络调试助手+TCP服务器
  • 【unity】(1)场景
  • 【Linux】进程间通信IPC机制
  • 【如此简单!数据库入门系列】之效率基石 -- 磁盘空间管理
  • 专业渗透测试 Phpsploit-Framework(PSF)框架软件小白入门教程(五)
  • 5月7日监控二叉树+斐波那契数
  • C++类的设计编程示例
  • YOLOv5 V7.0 - rknn模型的验证 输出精度(P)、召回率(R)、mAP50、mAP50-95
  • CUDA、CUDNN、Pytorch三者之间的关系
  • vue-cli2,vue-cli3,vite 生产环境去掉console.log
  • Docker-Compose编排LNMP并部署WordPress
  • 附录C:招聘流程
  • 1688快速获取整店铺列表 采集接口php Python
  • CTF-WEB(MISC)
  • Ubuntu如何更换 PyTorch 版本
  • python flask css样式无效
  • 大数据学习笔记14-Hive基础2
  • vue3 下载图片(包括多图片下载)
  • LabVIEW如何通过子VI更改主VI控件属性?
  • 关于MS-DOS时代的回忆
  • 数据库索引(Mysql)
  • 异常-Exception
  • ctfshow——SQL注入
  • 第十三章 计算机网络