我该怎么回事假,例外等等

时间:2012-04-27 09:25:39

标签: php

我有一个方法可以创建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语句中抛出异常,还是只返回false并在我将$ user变量设置为对象时使用if语句?

3 个答案:

答案 0 :(得分:5)

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

我的决定基于:这是特殊事件吗?这应该永远不会发生吗?
如果答案是,则抛出异常。如果答案是,则可能会发生这种情况,我只需处理此案例return false

答案 1 :(得分:1)

我会返回null。此功能具有单一责任:尝试根据其ID查找用户。如果没有找到,那么它找不到,而“null”就是这么说的。 之后,调用此函数的代码应该处理问题。

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

答案 2 :(得分:0)

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

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