关于对象和寻找单行的问题

时间:2010-11-24 11:27:28

标签: php oop zend-framework

我试图以某种方式坚持面向对象编程的规则。因此,我创建了一个用户类,用于处理一个用户。该用户是从db类用户加载的。

所以现在我正在创建一个userManager类,其函数类似于:findUserIdByEmail。

但是,正确的面向对象的方法是什么?

我应该直接从userManager构建一个查询到db还是应该以某种方式加载所有用户对象并在对象中找到它?

3 个答案:

答案 0 :(得分:2)

我会构建类似getUserByEmail($email)的东西,它返回完整的对象(有或没有相关对象)。在这种情况下,您可以使用$ User-> id访问id(或者,更好的是,为它构建一个不错的getter),还可以访问其他属性,而无需对数据库执行其他查询。如果您开始构建getUserIdByEmail之类的功能,您很快就会开始构建getUserNameByEmailgetUserPasswordByEmail等方法。请参阅问题?

答案 1 :(得分:1)

我会实施

  

getUserByEmail($电子邮件)

哪个会调用数据库或任何其他数据存储区。基本示例减去转义/安全性

public function getUserByEmail($email)
{
    $sql = "SELECT user_name AS username, user_id AS userId FROM User WHERE email_address =   ". $email
    $result = $this->runQuery($sql);
    while($r = $result->getAssoc()){
        $user = $this->createUserModel($r);    
    }
    return $user;
}

public function createUserModel($row)
{
    $user = new Default_Model_User;
    $user->setUsername($row['username']);
    $user->setUserId($row['userId']);

    return $user;
}

然后,电子邮件方法将调用一个方法来创建保存属性的对象并将其返回。

答案 2 :(得分:1)

我将创建一个类对应于您在数据库中存储用户的表的类。我还将创建一个简单的User类,对应于存储用户的表结构。

表用户将拥有getSingleByEmail($ theEmail)方法,该方法将返回User对象,如果此类用户不存在,则为null。

class Users
{
    public function getSingleByEmail($theEmail)
    {
        // check that email is valid
        // if not throw exception

        // get data from the database
        // either with bare SQl or with some db wrapper
        if (null !== theResult)
        {
            theResult = new User($theResult);
        }
        return theResult;
    }
}

class User
{
    private $id;
    private email;
    private $username;

    public function __construct($theResult)
    {
        $this->id = theResult->id;
        $this->email = theResult->email;
        $this->username = theResult->username;
    }
}

或类似的东西。