middleware = $middleware; $this->default = $default; } public function handle(ServerRequestInterface $request): ResponseInterface { if (empty($this->middleware[$this->index])) { return call_user_func($this->default, $request); } return $this->middleware[$this->index]->process($request, $this->nextHandler()); } /** * Get a handler pointing to the next middleware. * * @return static */ private function nextHandler() { $copy = clone $this; $copy->index++; return $copy; } }