PHP 返回类型提示,对象还是布尔值?

2022-08-30 21:13:29

所以我知道我可以在php7中做返回类型提示。我可以用以下方式做一个对象返回提示:

function getUser($pdo, $username) : User
{

}

其中 User 是要返回的对象。

但是,如果在 SQL 中找不到该用户,则返回而不是 User 对象会给出:'false'

未捕获的类型错误:UserFind::findUser() 的返回值必须是 User 的实例,返回布尔值

但是,如果 SQL 找不到用户怎么办?如果用户不存在,如何返回布尔值 false?在这种情况下,我是否应该忽略返回类型提示?

编辑:我看了另一个问题,“php 7中的Nullable返回类型”,虽然我的问题几乎相同,但我想通过询问是否有一种方法可以返回两种类型之一来扩展我的问题。例如,如果对象不存在,则返回对象或字符串?


答案 1

您正在谈论的称为联合类型。在内部有相当多的讨论

此 RFC 建议能够为参数或返回类型定义多个可能的类型,并将它们称为“联合类型”。如果值将联合类型中的任何一个成员传递到联合,则该值将传递联合类型的类型检查。在两种或多种类型中的每一种之间放置一个竖线 (OR)。

下面是一个参数的示例,该参数接受数组或可遍历,而不接受其他类型:

function (Array | Traversable $in) {
    foreach ($in as $value) {
        echo $value, PHP_EOL;
    }
}

联合中可以有两种以上的类型。例如,与数据库交互的例程通常具有以下三种结果之一:

  1. 已成功找到结果
  2. 已成功找到无结果
  3. 出现错误

这都是针对 PHP 7.1 的,但还没有投票(更不用说看起来它会通过)。

那么你的问题呢?我想说的是,至少现在,不要输入提示你的回报。只需发布一个文档块,说它可以返回或Userfalse

/**
 * @param \PDO $pdo
 * @param string $username
 * @return User|false
 */

答案 2

推荐