0

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

ユーザーを含む mysql db と、dbmanager とユーザー クラスの 2 つのクラスを含む php ファイルがある場合、ユーザー クラス内で dbmanager のメソッドを使用しても問題ありませんか?

そうでない場合、ユーザー クラスと db クラスを相互に対話させるにはどうすればよいですか?

ありがとう

- -編集 - -

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

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

2 に答える 2

0

あるクラスのインスタンスを別のクラス内で使用することに何の問題もありません。それは構成と呼ばれます。

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

これが実際に意味すること:

  • メンバー/プロパティの1つとしてデータベースクラスインスタンスを持つユーザークラスがある場合、クラスのインスタンスを含むメンバーでデータベースクラスのすべてのパブリックメソッドを呼び出すことができます。

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

于 2010-12-11T20:46:56.573 に答える
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 にあり、オブジェクトと DB の関係は DBTable にあります。そのようなモデルの例として Zend Framework を見ることができます: http://framework.zend.com/manual/en/zend.db.table.html

于 2010-12-11T20:48:57.823 に答える