我正在使用此函数,根据用户请求的格式,我将在其中返回JsonResponse或Http Response。如何返回类型提示两个返回?
public function findAll(array $data)
{
$countryRepository = new CountryRepository();
$countries = $countryRepository->findAll();
if ($data['data_format'] === DataFormat::JSON) {
$countriesMapper = new CountryResource($countries);
return new JsonResponse($countriesMapper->collection($countries), HttpStatusCode::HTTP_OK);
} elseif ($data['data_format'] === DataFormat::XML) {
$xmlResponse = $this->responseFactory->view('XML.country.list', compact('countries'))->header('Content-Type', 'text/xml');
return $xmlResponse;
}
}
答案 0 :(得分:0)
如果两种响应类型都继承自我认为的同一个父类,则可以将其用作类型提示。我记得读过有关此内容的文章,计划用于php 7.4。
class JsonResponse extends Response { ... }
class XmlResponse extends Response { ... }
public function findAll(...) : Response { ... }
或者您可以将其作为无效的回报并赋予其他方法以责任感
public function findall(...) : void {
switch($data['data_format']) {
case DataFormat::JSON:
$this->returnJson(...);
break;
case DataFormat::XML:
$this->returnXml(...);
break;
default:
# error
break;
}
}
protected function returnXml(...) : XmlResponse {}
protected function returnJson(...) : JsonResponse {}