2012-04-27 50 views
2

我有中创建用户类的对象,但如果用户没有找到我需要返回的东西的方法,但我不知道是什么:我应该返回false,异常等

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语句?

+0

我觉得返回false就够了,跟踪任何其他方法,让我们等待答案 – nu6A 2012-04-27 09:28:29

回答

5

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

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

+3

+1这是个很好的答案 – freshnode 2012-04-27 09:29:25

+1

也许考虑返回'null'?它讲述了整个故事(*没有*用户被发现)。 – kapa 2012-04-27 09:30:11

+0

@baž我宁愿'错误'。不返回值的函数的返回值已经是'null','false'通常用来表示“你尝试过的东西没有工作”。 – deceze 2012-04-27 09:34:14

1

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

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

相关问题