【发布时间】:2016-08-20 19:00:00
【问题描述】:
所以我知道我可以在 php7 中进行返回类型提示。我可以做一个对象返回提示:
function getUser($pdo, $username) : User
{
}
其中 User 是要返回的对象。
但是,如果在 SQL 中找不到用户,则返回 'false' 而不是 User 对象给出:
未捕获的类型错误:UserFind::findUser() 的返回值必须是 User 的实例,返回布尔值
但是如果 SQL 找不到用户怎么办?如果用户不存在,我如何返回布尔值,假?在这种情况下我应该忽略返回类型提示吗?
编辑:我查看了另一个问题“php 7 中的可空返回类型”,虽然我的问题几乎相同,但我想通过询问是否有办法返回两种类型中的一种来扩展我的问题。例如,如果对象不存在,则返回对象或字符串?
【问题讨论】:
-
我总是觉得这样的问题很奇怪,因为我的第一反应总是“使用例外”。然后我记得例外是,像许多其他事情一样,PHP 中所谓的“红发继子”。
-
@IgnacioVazquez-Abrams PHP 通常只是采用另一种处理异常的方法。例如,Python 几乎将它们用于所有事情。 PHP 没有。异常通常相当慢也无济于事。
-
从一个方法中明确地有两种不同的返回类型对我来说似乎总是有点味道。如果找不到用户(即:您返回
false),您的调用代码需要做什么?这基本上是一个例外情况,所以我认为例外是处理它的更好方法。遗憾的是 PHP 没有空对象的概念:这将是比混合返回类型更好的方法。鉴于这不是一个选择:我认为例外是要走的路。
标签: php php-7 type-hinting