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

时间:2018-05-17 19:22:40

标签: php return php-7 type-hinting

function foo ($a): mixed
{
    if ($a == 1)    
        return true;
    else
        return 'foo';
}

var_dump(foo(1));

由于mixed不是真实类型,因此结果为:

  

致命错误:未捕获TypeError:foo()的返回值必须是   混合的例子......

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

1 个答案:

答案 0 :(得分:3)

类型提示是对传递或返回的值强制执行某些限制。由于“mixed”将允许任何值,因此将其用作类型提示将毫无意义,因此只需省略它。

有人建议在该语言中添加“联合类型”,这样您就可以在示例中将返回类型声明为bool|string,但尚未接受任何类型。

您可以在docblock中执行文档函数的返回值。 IDE和文档生成器通常会理解语法@return bool|string,然后您可以添加为什么返回类型变化的描述,以及何时预期哪种类型。

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