中间件的实现原理

运用 array_reduce 以及 call_user_func 实现

interface Middleware
{
public static function handle(Closure $next);
} class VerfiyCsrfToekn implements Milldeware{   
public static function handle(Closure $next)    {       
echo '验证csrf Token <br>';       
$next();   
}
} class VerfiyAuth implements Milldeware{
public static function handle(Closure $next)    {       
echo '验证是否登录 <br>';       
$next();   
}
} class SetCookie implements Milldeware{   
public static function handle(Closure $next)    {       
$next();       
echo '设置cookie信息!';   
}
} $handle = function () {   
echo '当前要执行的程序!';
}; $pipe_arr = [ 'VerfiyCsrfToekn', 'VerfiyAuth', 'SetCookie', ]; $callback = array_reduce($pipe_arr, function ($stack, $pipe) {
return function () use ($stack, $pipe) {
return $pipe::handle($stack);
};
}, $handle); call_user_func($callback);

最新文章

  1. Android stdio Apktool源码编译
  2. ES5/标准 ECMAScript 内置对象
  3. (ExtJs 3.4)Ext.Ajax.request的同步请求实现
  4. javascript篇-----函数作用域,函数作用域链和声明提前
  5. 提高SQL查询效率(SQL优化)
  6. Simple File System
  7. jQuery简介及语法
  8. Css杂谈
  9. 在Linux下查看环境变量
  10. Java程序猿JavaScript学习笔记(2——复制和继承财产)
  11. 用For Each语句对Session.Contents树组进行遍历
  12. ios 返回不会自动刷新页面问题
  13. 避免Toast重复弹出
  14. 为什么很多应用都安装在/usr/local目录下?
  15. GitHub如何删除一个仓库
  16. Oracle管理监控之sqlplus实现上下翻页设置
  17. 在数组中找出两数之和为10的所有组合(JAVA)
  18. SQL 处理排序空值
  19. BZOJ2588:Count on a tree(主席树)
  20. 20145335郝昊《java程序设计》第7周学习总结

热门文章

  1. ros python 构造 pose
  2. Spring-Cloud-Eureka实例
  3. zabbix(12)使用Grafana
  4. dp之斜率优化
  5. mysql中查询某个字段重复的数据
  6. centos7.2下查看的java版本号
  7. mac解压7z格式文件
  8. PyTorch Tutorials 3 Neural Networks
  9. 记一次环境变量导致的elasticsearch启动错误:max file descriptors [65535] for elasticsearch process is too low, incre
  10. Vue项目中的http请求统一管理