2010-11-24 11 views
0

私は何とかオブジェクト指向プログラミングのルールに固執しようとしています。ですから、私は1人のユーザーを扱うユーザークラスを作成しました。このユーザーはdbクラスユーザーから読み込まれます。オブジェクトに関する質問と単一行の検索

これで、findUserIdByEmailのような関数でuserManagerクラスを作成しています。

しかし、これを行うには正しいオブジェクト指向の方法は何ですか?

userManagerからdbに直接クエリーを作成する必要がありますか、どういうわけかすべてのユーザーオブジェクトをロードしてオブジェクト内で検索する必要がありますか?

+0

「それを使用する」とはどういう意味ですか?入力として、出力として、..? – KingCrunch

答えて

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; 
    } 
} 

などです。

関連する問題