如何在PHP中添加多个返回类型提示

时间:2019-07-26 16:08:37

标签: php laravel return-type

我正在使用此函数,根据用户请求的格式,我将在其中返回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;
    }
}

1 个答案:

答案 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 {}