为了账号安全,请及时绑定邮箱和手机立即绑定

一个让PHP小白百思不得其解的匿名函数及array_reduce的问题

一个让PHP小白百思不得其解的匿名函数及array_reduce的问题

PHP
蝴蝶不菲 2019-03-10 01:09:11
最近学习PHP,看到了一段代码,其中涉及到了匿名函数以及array_reduce,把代码敲出来用各种方法分析也没想出是怎么调用的,代码如下: <?php interface Middleware { public static function handle(Closure $next); } class VerifyCsrfToken implements Middleware { public static function handle(Closure $next) { echo "(5)验证Csrf-Token".'<br>'; $next(); } } class ShareErrorsFromSession implements Middleware { public static function handle(Closure $next) { echo "(4)如果session中有'errors'变量,则共享它".'<br>'; $next(); } } class StartSession implements Middleware { public static function handle(Closure $next) { echo "(3)开启session,获取数据".'<br>'; $next(); echo "(7)保存数据,关闭session".'<br>'; } } class AddQueuedCookiesToResponse implements Middleware { public static function handle(Closure $next) { $next(); echo "(8)添加下一次请求需要的cookie".'<br>'; } } class EncryptCookies implements Middleware { public static function handle(Closure $next) { echo "(2)对输入请求的cookie进行解密".'<br>'; $next(); echo "(9)对输出相应的cookie进行加密".'<br>'; } } class CheckForMaintenanceMode implements Middleware { public static function handle(Closure $next) { echo "(1)确定当前程序是否处于维护状态".'<br>'; $next(); } } function getSlice() { return function($stack, $pipe) { return function() use ($stack, $pipe) { return $pipe::handle($stack); }; }; } function then() { $pipes = [ "CheckForMaintenanceMode", "EncryptCookies", "AddQueuedCookiesToResponse", "StartSession", "ShareErrorsFromSession", "VerifyCsrfToken" ]; $firstSlice = function() { echo "(6)请求向路由器传递,返回响应.".'<br>'; }; $pipes = array_reverse($pipes); $go = array_reduce($pipes, getSlice(),$firstSlice); $go(); } then(); ?> 还望有大神能帮忙详解下$go = array_reduce($pipes, getSlice(),$firstSlice);和$go();这两段代码背后的每一步的调用执行流程,以及调用时的参数传递是哪些,如果能用流程图表示就更好啦,谢谢。
查看完整描述

2 回答

?
慕妹3242003

TA贡献1824条经验 获得超6个赞

赞赞,感谢大神不吝赐教。

查看完整回答
反对 回复 2019-03-18
  • 2 回答
  • 0 关注
  • 594 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信