当前类构造方法:单个类实例化时先执行自身的构造方法,如tp的前置操作。基类:多个类实例化时,都需一定的初始化,那么就把通用的初始化过程放进基类中。中间件:和实例化无关,多个对象按照顺序完成一件事,称为“管道”,每个中间件可以是类的一个方法也可以function(){}。如一杯泥沙的水,先通过过滤沙石的装置(对象),再通过过滤泥沙的装置(又一对象),再通过杀菌的装置(对象),再通过出水装置(对象)。即输出净水前,通过N个中间件。简单阐述下原理: $step1 = function ($next){ echo "第一步:过滤小石头".PHP_EOL; $next(); }; $step2=function ($next){ echo "第二步:过滤细沙".PHP_EOL; $next(); }; $step3 = function ($next){ echo "第三步:过滤细菌".PHP_EOL; $next(); }; $sucess = function (){ echo "最后:输出纯净水".PHP_EOL; }; $callback = function ($next,$step) { return function () use ( $next, $step ) { return $step($next); }; }; $middleWares = [ $step1, $step2, $step3 ]; $middleWares=array_reverse($middleWares); //将数组元素顺序反转 call_user_func( array_reduce($middleWares,$callback,$sucess) ); //第一步:过滤小石头 第二步:过滤细沙 第三步:过滤细菌 最后:输出纯净水 那么接下来演示框架中的中间件 interface MiddleWare{ public static function handle(Closure $next); } class StartSession implements MiddleWare{ public static function handle( Closure $next ) { echo '开启 session'.'<br>'; $next(); echo '关闭 session'.'<br>'; } } class AddQueuedCookiesToResponse implements MiddleWare{ public static function handle( Closure $next ) { $next(); echo '添加下一次请求的token'."<br>"; } } class EbcryptCookies implements MiddleWare{ public static function handle( Closure $next ) { echo '对 cookie 加密'.'<br>'; $next(); echo '对 cookie 解密'.'<br>'; } } function getSlice(){ return function ($stack,$pipe){ return function () use ($stack,$pipe){ return $pipe::handle($stack); }; }; } function then() { $pipes = [ 'EbcryptCookies', //加密请求cookie 'AddQueuedCookiesToResponse', //添加下一次请求需要的cookie 'StartSession', //开启session ]; $firstSlice=function(){echo '请求向路由器传递,返回相应'.'<br>';}; $pipes=array_reverse($pipes); call_user_func( array_reduce($pipes,getSlice(),$firstSlice) ); } then(); /* 对 cookie 加密 开启 session 请求向路由器传递,返回相应 关闭 session 添加下一次请求的token 对 cookie 解密 */
当前类构造方法:单个类实例化时先执行自身的构造方法,如tp的前置操作。
基类:多个类实例化时,都需一定的初始化,那么就把通用的初始化过程放进基类中。
中间件:和实例化无关,多个对象按照顺序完成一件事,称为“管道”,每个中间件可以是类的一个方法也可以function(){}。如一杯泥沙的水,先通过过滤沙石的装置(对象),再通过过滤泥沙的装置(又一对象),再通过杀菌的装置(对象),再通过出水装置(对象)。即输出净水前,通过N个中间件。
简单阐述下原理:
那么接下来演示框架中的中间件