【发布时间】:2017-07-23 03:22:31
【问题描述】:
所以,现在我们有了新的 PHP7,我们可以检查返回类型是否是我们想要的。
例如,
function foo(): bool
{
$num = 8;
if (10 === $num) {
return true;
} else {
return false;
}
}
foo();
输出:false
好吧,这很容易吗?它按原样工作,但如果返回不是我们所期望的?
function bar(): bool
{
$num = 10;
if (10 === $num) {
return array(['apple', 'banana', 'strawberry']);
} else {
return false;
}
}
bar();
输出:Uncaught TypeError: Return value of foo() must be of the type boolean, array returned
这是非常基本的,这些例子只是展示了它是如何工作的。
如果我们有代码示例 2 中的函数,我们可以检查多个返回类型吗?喜欢
function bar(): bool || array <---
{
$num = 10;
if (10 === $num) {
return array(['apple', 'banana', 'strawberry']);
} else {
return false;
}
}
bar();
但是这个结果:FATAL ERROR syntax error, unexpected '||' (T_BOOLEAN_OR), expecting '{' on line number 2
那么可以定义多种返回类型吗?
【问题讨论】:
-
如果您有多种返回类型,那么类型提示的意义何在?据我所知,它不是语言功能,实现起来似乎也没什么用。如果您需要多种返回类型,请不要尝试输入提示。如果您需要指定有错误但想输入提示,
throw和Exception或使用可为空的类型提示和return null。 -
您描述的功能前段时间被拒绝:wiki.php.net/rfc/union_types