2010-12-11 8 views
0

私はオブジェクト指向ユーザシステムへのアプローチを探していましたが、私の質問に答えるチュートリアルは見つかりませんでした。私は実際にコードのことを気にしない、後でそれを行うことができますが、OOPのロジックは本当に私を殺しています(ああ、私はOOPを初めて使っています。OOPユーザシステムロジック

私はユーザーとdbmanagerとユーザークラスの2つのクラスを持つphpファイルを持っている場合、dbmanagerのメソッドをユーザークラス内で使用するのは問題ありませんか?

もしそうでなければ、ユーザークラスとdbクラスを相互にやりとりさせるにはどうすればよいですか?

おかげ

--- EDIT ---

は、このアプローチは正しいでしょうか?たとえば、拡張クラスを使用する利点は何ですか?

class db{ 
    function checkUser($login, $password){ 
     $password = sha1(md5($password)); //encrypt password 
     $query = "SELECT * FROM users WHERE (login='$login' OR email='$login')"; 
     $result = mysql_query($query); 

     if ($user = mysql_fetch_assoc($result)) { 
      if ($user["password"] == $password) { 
       //there's a user class somwhere else 
       $checkeduser = new user($user); 
       return $checkeduser; 
      } else return true; //bad password 
     } else return false; //user not registered 
    } 

    $user = $dbconnection->checkUser($login, $password); //encrypted password 
    if(is_object($user)) { //if logs in 
    $_SESSION["user"] = serialize($user); 
     header("Location:index.php"); //go to home 
    } 

答えて

0

あるクラスのインスタンスを別のクラス内で使用することは間違いありません。それは組成物と呼ばれる。

もう1つのアプローチは、継承です。サブクラスは、親クラスからメソッドとプロパティを継承し、親クラスの機能を拡張します。

が、これは実際にはどういう意味:

  • あなたは、そのメンバー/特性の一つとして、データベースクラスのインスタンスを持っているユーザークラスを持っている場合は、メンバー上のデータベースクラスのすべてのパブリックメソッドを呼び出すことができますそのクラスのインスタンスが含まれています。

  • データベースクラスを拡張するユーザークラスを使用している場合は、親(データベース)クラスのメソッド(一部)を使用できる必要があります。

+0

Thanks code_burgar。昨日私は自分で別のアプローチをしました。それが正しいのか、拡張クラスを使う利点があるのか​​教えてください。 (版を見てください) –

0

モデルの1つは、DBとオブジェクトの間で変換する汎用クラスを持つということです。 DBから行を読み取り、オブジェクトのプロパティに割り当てることによって、このような:

abstract class DBTable { 
     function __construct(DBDriver $db) { 
     $this->db = $db; 
     } 
     function loadData($id) { 
      $row = $this->db->query("SELECT * FROM {$this->table_name} WHERE id=?", $id); 
      foreach($row as $key => $value) { 
       $this->$key = $value; 
      } 
     } 
    } 

    class User extends DBTable { 
     public $table_name = "users"; 
    } 

    $db = new MySQLDBDriver(); 
    $user = new User($db); 
    $user->load("joe"); 

実際のDB処理がDBManagerの、オブジェクトおよびDBTABLEにDBの関係にあります。そのようなモデルの例として、Zend Frameworkを見てください。http://framework.zend.com/manual/en/zend.db.table.html

+0

ありがとうStasM、それは多くを助ける。昨日私は自分で別のアプローチをしました。それが正しいか教えてください。 (版を見る) –