2010-11-24 28 views
0

我想以某種方式堅持面向對象編程的規則。所以我創建了一個用戶類,它處理一個用戶。該用戶從db類用戶加載。關於對象和尋找單行的問題

所以現在我創建一個userManager類,其功能如下:findUserIdByEmail。

但是,正確的面向對象的方法是什麼?

我應該從userManager直接建立一個查詢數據庫,或者我應該加載所有用戶對象在對象中找到它?

+0

你是什麼意思的「使用它」?作爲輸入,作爲輸出,..? – KingCrunch 2010-11-24 11:30:28

回答

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

我會構建類似getUserByEmail($email)的東西,它返回完整的對象(帶或不帶相關對象)。在這種情況下,您可以使用$ User-> id來訪問id(或者,更好地爲它構建一個漂亮的getter),還可以使用其他屬性而不對數據庫執行其他查詢。如果你開始建立像getUserIdByEmail這樣的函數,你很快就會開始構建一個像getUserNameByEmailgetUserPasswordByEmail等方法。看問題?

1

我會創建一個類用戶對應於你在數據庫中存儲用戶的表的用戶。我還會創建一個簡單的User類,它對應於存儲用戶的表結構。

表用戶將有方法getSingleByEmail($ theEmail)它將返回一個用戶對象或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; 
    } 
} 

或類似的東西。