container = \Kiri::getDi(); if ($this->reflectionType != null) { $this->format = $this->container->get($this->returnType()); } else { $this->format = $this->container->get(MixedFormat::class); } } /** * @return string */ protected function returnType(): string { return match ($this->reflectionType->getName()) { 'array' => ArrayFormat::class, 'mixed', 'object' => MixedFormat::class, 'int', 'string', 'bool' => OtherFormat::class, 'void' => VoidFormat::class, default => ResponseFormat::class }; } /** * @param string $method * @return void * @throws ContainerExceptionInterface * @throws NotFoundExceptionInterface */ public function setRequestMethod(string $method): void { if ($method == 'HEAD') { $this->format = $this->container->get(NoBody::class); } } /** * @return bool */ public function isClosure(): bool { return $this->handler instanceof Closure; } /** * @param string $interface * @return bool */ public function implement(string $interface): bool { if (!$this->isClosure()) { return $this->handler[0] instanceof $interface; } return false; } /** * @return string|null */ public function getClass(): ?string { if ($this->isClosure()) { return null; } return $this->handler[0]::class; } /** * @return string|null */ public function getMethod(): ?string { if ($this->isClosure()) { return null; } return $this->handler[1]; } /** * @param ServerRequestInterface $request * @return ResponseInterface * @throws ReflectionException */ public function handle(ServerRequestInterface $request): ResponseInterface { $data = call_user_func($this->handler, ...$this->parameter); /** 根据返回类型 */ return $this->format->call($data); } }