$middleware * @param callable(RequestInterface): ResponseInterface $core * @return callable(RequestInterface): ResponseInterface */ public static function compose(array $middleware, callable $core): callable { foreach (array_reverse($middleware) as $middlewareInstance) { $next = $core; $core = static function (RequestInterface $request) use ($middlewareInstance, $next): ResponseInterface { return $middlewareInstance->handle($request, $next); }; } return $core; } }