我想以某種方式堅持面向對象編程的規則。所以我創建了一個用戶類,它處理一個用戶。該用戶從db類用戶加載。關於對象和尋找單行的問題
所以現在我創建一個userManager類,其功能如下:findUserIdByEmail。
但是,正確的面向對象的方法是什麼?
我應該從userManager直接建立一個查詢數據庫,或者我應該加載所有用戶對象在對象中找到它?
我想以某種方式堅持面向對象編程的規則。所以我創建了一個用戶類,它處理一個用戶。該用戶從db類用戶加載。關於對象和尋找單行的問題
所以現在我創建一個userManager類,其功能如下:findUserIdByEmail。
但是,正確的面向對象的方法是什麼?
我應該從userManager直接建立一個查詢數據庫,或者我應該加載所有用戶對象在對象中找到它?
我會實現
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;
}
電子郵件的方法,然後將調用創建保存屬性並返回它的對象的方法。
我會構建類似getUserByEmail($email)
的東西,它返回完整的對象(帶或不帶相關對象)。在這種情況下,您可以使用$ User-> id來訪問id(或者,更好地爲它構建一個漂亮的getter),還可以使用其他屬性而不對數據庫執行其他查詢。如果你開始建立像getUserIdByEmail
這樣的函數,你很快就會開始構建一個像getUserNameByEmail
,getUserPasswordByEmail
等方法。看問題?
我會創建一個類用戶對應於你在數據庫中存儲用戶的表的用戶。我還會創建一個簡單的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;
}
}
或類似的東西。
你是什麼意思的「使用它」?作爲輸入,作爲輸出,..? – KingCrunch 2010-11-24 11:30:28