onHandler($passable, $stack); } return call_user_func($pipe, $passable, $stack); }; }, $caller); } /** * @param $middlewares * @param Closure $caller * @return Closure */ public static function closureMiddlewares($middlewares, Closure $caller): Closure { return array_reduce(array_reverse($middlewares), function ($stack, $pipe) { return function ($passable) use ($stack, $pipe) { if ($pipe instanceof MiddlewareInterface) { return $pipe->onHandler($passable, $stack); } return call_user_func($pipe, $passable, $stack); }; }, $caller); } }