PHP中返回混合类型时如何设置类型提示?mixed类型报错解惑
PHP混合返回值的类型提示解决方案
先看你给出的这段代码:
function foo ($a): mixed { if ($a == 1) return true; else return 'foo'; } var_dump(foo(1));
正如你遇到的,在部分PHP版本里mixed并不是有效的可声明返回类型,所以会抛出如下错误:
Fatal error: Uncaught TypeError: Return value of foo() must be an instance of mixed...
针对你的问题,分情况给你梳理解决方案:
1. 有没有办法为混合返回值设置类型提示?
在PHP 8.0及以上版本,mixed已经被正式作为伪类型支持了,它等价于array|bool|callable|int|float|null|object|resource|string的联合类型,这时候直接写: mixed是完全合法的,不会触发错误。但如果你的PHP版本低于8.0,mixed就不是有效的类型提示,自然会报错。
2. 不支持mixed的场景下,是不是只能不声明类型提示?
是的,但还有更优的替代方案:
- 如果你的PHP版本是7.4及以上(支持联合类型),可以显式列出所有可能的返回类型,比如你的例子里可以改成:
这种写法比不声明类型提示更清晰,能明确告知调用者函数的返回值范围,也能让PHP帮你做类型校验。function foo ($a): bool|string { if ($a == 1) return true; else return 'foo'; } var_dump(foo(1)); - 如果是PHP 7.3及以下版本,确实只能不声明返回类型提示,不过更推荐的做法是重构函数,尽量让它返回单一类型——毕竟单一返回类型的代码可读性和可维护性都更高,也能避免很多潜在的类型问题。
内容的提问来源于stack exchange,提问作者IMB
相关产品推荐
相关产品推荐

