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

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

var_dump(foo(1));

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

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

有没有一种方法可以键入提示的mixed返回值,或者您是否根本没有在这种情况下声明类型提示?

即时通讯

那里有类型提示来对传递或返回的值施加一些限制。由于“混合”将完全允许任何值,因此将其用作类型提示将毫无意义,因此只需将其忽略即可。

已经有人提议在语言中添加“联合类型”,这将允许您在示例中将返回类型声明为bool|string,但尚未接受任何声明

您可以做的是在文档块中记录函数的返回值。IDE和文档生成器通常会理解语法@return bool|string,然后您可以添加关于返回类型为何变化以及何时期望哪种类型的描述。

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

子类中返回值的类型提示

如果不使用返回值,ʻunwrap()`的目的是什么?

函数返回多个返回值的Python类型提示

为什么我不能在方法中混合使用返回值和表达式

如果我不关心返回值,应该使用哪种返回类型声明函数?

在Clojure中将类型提示用于Java返回值

如果语句抛出不兼容的类型:意外的返回值

read()使用什么返回值?

如果不使用返回值,Class.forName()的用途是什么?

如果返回值可变,为什么要使用getter和setter方法?

如果使用setter方法,为什么irb会回显赋值的右侧而不是返回值?

LinqToSQL加入什么类型用作List的返回值

从返回值推断类型

Java中使用从方法的返回值,如果else语句

无法在返回值中使用类型的变量

使用未导入包中的类型的返回值

如何使用自引用类型返回值定义方法

为什么我的函数不返回值,但是如果使用print,它就可以工作?

如果我忽略了shared_ptr返回类型的函数的返回值怎么办

从查询返回int值的int类型函数的返回值是什么

TypeScript返回类型,即席返回值

当对Option.getOrElse的返回值使用隐式转换时,为什么在Scala中类型推断失败?

eth合约函数何时需要带存储的返回值?为什么不只使用内存类型?

如果已经保证函数可以返回或抛出,为什么必须指定返回值?

什么时候应该使用方法返回值?

如果地图中没有东西,返回值取什么值?

为什么int类型方法允许字符类型作为返回值?

为什么Java类型推断不适用于参数化类型的返回值?

为什么编译器不推断impl trait返回值的关联类型的具体类型?