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

时间:2016-04-26 19:00:16

标签: php php-7 type-hinting

所以我知道我可以在php7中做返回类型提示。我可以用:

做一个对象返回提示
function getUser($pdo, $username) : User
{

}

其中User是要返回的对象。

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

  

Uncaught TypeError:UserFind :: findUser()的返回值必须是User的实例,返回布尔值

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

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

1 个答案:

答案 0 :(得分:18)

您所谈论的内容称为联盟类型。有considerable discussion about it in Internals

  

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

     

以下是接受数组或Traversable而不接受其他类型的参数示例:

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

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

     
      
  1. 成功找到结果
  2.   
  3. 未成功找到结果
  4.   
  5. 出现错误
  6.   

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

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

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