我有一些方法可以返回one of two return types.我使用的是一个利用MCV的框架,所以重构这几个函数并没有什么吸引力.
是否可以声明返回一个或另一个的返回类型,并在其他任何方面失败?
function test(): ?
{
if ($this->condition === false) {
return FailObject;
}
return SucceedObject;
}
我有一些方法可以返回one of two return types.我使用的是一个利用MCV的框架,所以重构这几个函数并没有什么吸引力.
是否可以声明返回一个或另一个的返回类型,并在其他任何方面失败?
function test(): ?
{
if ($this->condition === false) {
return FailObject;
}
return SucceedObject;
}
从PHP 8+开始,您可以使用union types:
function test(): FailObject|SuccessObject {}
另一种方式是两个对象共享一个接口,这种方式自PHP4以来的所有版本都可以使用.例子:
interface ReturnInterface {}
class FailObject implements ReturnInterface {}
class SuccessObject implements ReturnInterface {}
function test(): ReturnInterface {}
在本例中,ReturnInterface
为空.仅它的存在就支持所需的返回类型声明.
还可以使用基类,可能是抽象类.
对我来说,对于这个用例,接口比联合类型更清晰、更可扩展.例如,如果我以后想要WarnObject
,我只需要将其定义为扩展ReturnInterface
,而不是遍历所有签名并将其更新为FailObject|SuccessObject|WarnObject
.