所以我知道我可以在 php7 中进行返回类型提示。我可以使用以下方法进行对象返回提示:
function getUser($pdo, $username) : User
{
}
其中 User 是返回的对象。
但是,如果在 SQL 中找不到用户,则返回'false'
而不是 User 对象给出:
未捕获的类型错误:UserFind::findUser() 的返回值必须是 User 的实例,返回布尔值
但是如果 SQL 找不到用户怎么办?如果用户不存在,如何返回布尔值 false?在这种情况下我应该忽略返回类型提示吗?
编辑:我查看了另一个问题“php 7 中的可为空返回类型”,虽然我的问题几乎相同,但我想通过询问是否有办法返回两种类型之一来扩展我的问题。例如,如果对象不存在,则返回一个对象或字符串?
你所说的称为联合类型。有在《Internals》中对此进行了大量讨论 https://wiki.php.net/rfc/union_types
该 RFC 提出了为参数或返回类型定义多种可能类型的能力,并将它们称为“联合类型”。如果该值将传递联合的任何一个成员,则该值通过联合类型的类型检查。竖线 (OR) 放置在两种或多种类型之间。
以下是接受数组或 Traversable 且不接受其他类型的参数的示例:
function (Array | Traversable $in) {
foreach ($in as $value) {
echo $value, PHP_EOL;
}
}
联合体中可以有两种以上的类型。例如,与数据库交互的例程具有以下三个结果之一是很常见的:
- 成功找到结果
- 成功发现没有结果
- 有一个错误
这都是针对 PHP 7.1 的,但尚未进行投票(更不用说看起来会通过)。
那么你的问题呢?我想说,至少现在,不要输入提示您的返回。只需发出一个说明可以返回的文档块User
or false
/**
* @param \PDO $pdo
* @param string $username
* @return User|false
*/
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)