我应该返回什么 false、异常等


What should I return false, exception, etc

>我有一个创建User类对象的方法,但是如果找不到用户,我需要返回一些东西,但我不确定是什么:

function getUserById($id)
{
    $sth = $this->db->prepare("SELECT id, username, password, salt, email, created, last_active FROM users WHERE id = ?");
    $sth->execute(array($id));
    $sth->setFetchMode(PDO::FETCH_OBJ);
    if ($sth->rowCount() == 0) {
        //return what?
    }
    $row = $sth->fetch();
    $user = new User($row);
    return $user;
}

该方法应如下所示:

$user = $user_mapper->getUserById($id);

问题是如果找不到用户,我应该如何处理?我应该使用 try catch 块,然后在 rowCount == 0 if 语句中抛出异常,还是在将 $user 变量设置为对象时只返回 false 并使用 if 语句?

这完全取决于您和您的错误处理理念。

我会根据以下因素来决定这一点:这是一个特殊的事件吗?这应该永远不会发生吗?
如果答案是肯定的,则引发异常。如果答案是这可能会发生,我只需要处理这种情况,return false

我会返回 null。这个函数只有一个责任:尝试根据用户的ID找到用户。如果它没有找到,那么,它没有找到,而"null"正是这样说的。之后,调用此函数的代码应该处理问题。

现在,由于您是通过ID而不是登录名/密码来查找用户的,因此您还应该抛出一个异常:因为您的应用程序中可能存在错误:如果您有id,它应该链接到数据库中的某些内容。

我建议添加一个自定义异常处理程序,因为您可以拥有一致的日志记录方法或可以从一个函数管理的用户反馈方式。有关一些指导,请参阅 http://php.net/manual/en/function.set-error-handler.php。

因此,在抛出异常时,请尝试具有描述性。您还可以使用 debug_backtrace 找出触发异常时的执行状态。请参阅 http://www.php.net/manual/en/function.debug-backtrace.php。