如果返回值混合,使用什么类型提示?

2022-08-31 01:04:22
function foo ($a): mixed
{
    if ($a == 1)    
        return true;
    else
        return 'foo';
}

var_dump(foo(1));

由于 不是实际类型,因此会导致:mixed

致命错误:未捕获的类型错误:foo() 的返回值必须是混合的实例。

有没有办法键入提示返回值,或者您只是不在这种情况下声明类型提示?mixed


答案 1

类型提示用于对传递或返回的值强制实施一些限制。由于“混合”将允许任何值,因此将其用作类型提示将毫无意义,因此只需省略它即可。

从 PHP 8.0 开始,您可以指定“联合类型”,这将允许您在示例中将返回类型声明为 .(在联合中包含也有一个特殊情况,如 中,因为它通常用于指示失败,但不适用于 。)bool|stringfalsefalse|stringtrue

作为替代方法,您可以使用可为 null 的类型提示,这些提示从 PHP 7.1 开始可用。,可以指定为要在失败时返回,而不是 。false|string?stringnullfalse

在旧版本中,您可以在文档块中记录函数的返回值。IDE 和文档生成器通常将理解语法 。即使您使用的是 PHP 8,也可能需要使用它来添加返回类型变化的原因以及何时期望哪种类型的说明。@return bool|string

当然,一个非常值得考虑的选项是重新考虑你的设计,并提出一个可以传达其结果的函数,而不会为不同的情况返回不同的类型。例如,使用异常而不是特殊值来表示错误,或者将类似函数拆分为两个函数和 。getThing(boolean $asString): float|stringgetThingAsFloat(): floatgetThingAsString(): string


答案 2

推荐