[英]PHP return type hinting, object OR a boolean?
所以我知道我可以在php7中做返回类型提示。 我可以做一个对象返回提示:
function getUser($pdo, $username) : User
{
}
其中User是要返回的对象。
但是,如果在SQL中找不到用户,则返回'false'
而不是User对象会给出:
未捕获的TypeError:UserFind :: findUser()的返回值必须是User的实例,返回布尔值
但是如果SQL无法找到用户怎么办? 如果用户不存在,我怎么能返回一个布尔值false? 在这种情况下,我应该忽略返回类型提示吗?
编辑:我看了另一个问题,“在PHP 7中可以为Nullable返回类型”,虽然我的问题几乎相同,但我想通过询问是否有办法返回两种类型中的一种来扩展我的问题。 例如,如果对象不存在,则返回一个对象或一个字符串?
你所说的是一种联盟类型。 在Internals中有相当多的讨论
此RFC建议能够为参数或返回类型定义多个可能的类型,并将其称为“联合类型”。 如果值将传递union中的任何一个成员,则值将传递union类型的类型检查。 垂直条(OR)放置在两种或更多种类型中的每一种之间。
以下是接受数组或Traversable而不包含其他类型的参数示例:
function (Array | Traversable $in) { foreach ($in as $value) { echo $value, PHP_EOL; } }
在联合中可以有两种以上的类型。 例如,与数据库交互的例程通常具有以下三种结果之一:
- 成功找到了结果
- 成功找不到任何结果
- 有一个错误
这一切都针对PHP 7.1,但尚未投票(更不用说看起来会通过)。
那么你的问题呢? 我会说,至少现在,不要输入提示你的回报。 只需发出一个说明可以返回User
或false
的doc块
/**
* @param \PDO $pdo
* @param string $username
* @return User|false
*/
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.