0

だから、私はクラスでコーディングを始めたばかりで、まだ頭がよくありません。OOP の概念は理解できましたが、質問があります。

データベースに「ユーザー」を保存しており、ユーザーについて必要な情報を取得し、「ユーザー」オブジェクトに関連することを実行するユーザー クラスが必要です。という事は承知しています。

たとえば、username と email のプロパティを持つユーザー クラスがあるとします。次のコードがあります。

<?php
    class User {
        private $username;
        private $email;

        public function __construct($username,$email) {
            $this->username=$username;
            $this->email=$email;
        }
    }
?>

これで、ユーザー名と電子メールにアクセスするにはゲッターとセッターが必要であることがわかりました。ゲッターさん、わかりました。しかし、セッター - これらは必要ですか? もしそうなら、これらはそのユーザーのデータベースのそのフィールドを更新する必要がありますか? メールのセッターは、データベースと $this->email を更新しますか? ばかげた質問のように思えるかもしれませんが、私はこれを正しくしたいと思います。

最後に、データベースからユーザーを取得してオブジェクトを作成する最良の方法は何ですか? 他の場所で、ID 50 からユーザー オブジェクトを作成したいとします。これは、データベースから ID 50 のユーザーを取得し、データベースの電子メール フィールドとユーザー名フィールドを使用してユーザー オブジェクトを作成します。これを行う最善の方法は何ですか?

ありがとう!

4

4 に答える 4

2
  • しかし、セッター - これらは必要ですか?

場合によります。プロパティを設定する以外に何もする必要がない場合は、使用しないでください。提供された値が正規表現などに一致するかどうか、または長すぎたり短すぎたりしないかどうかを確認する必要がある場合は、いずれかが必要になる可能性があります。他のプロパティのセッターがあり、保持したい場合にも必要になる場合があります。どのプロパティがセッターを持っているか持っていないかを覚えていない統一されたインターフェース。

  • もしそうなら、これらはそのユーザーのデータベースのそのフィールドを更新する必要がありますか?

複数のプロパティを変更する場合は、データベースに一度だけアクセスすることをお勧めします。一部のデータベース抽象化ライブラリはそのようにします:

$user->name = 'whatever';
$suer->email = 'whatever';
$user->save(); // Execute the modify query.

データベース内のデータへのアクセス/変更にはコストがかかります。

  • 最後に、データベースからユーザーを取得してオブジェクトを作成する最良の方法は何ですか?

たとえば、mysql を使用している場合は、次を使用できます。

$users = [ ];

while($row = $result->fetch_assoc()) {
    $user = new User;
    foreach($row as $field => $value) {
       $user->$field = $value;
    }
    $users[] = $user;
}

しかし、それを行うためのよりエレガントな方法があるかもしれません。

于 2013-07-30T12:51:35.910 に答える
0

オブジェクトを永続化する方法には、主に 2 つの方法があります。

アクティブ レコード/テーブル ゲートウェイ

このアプローチを使用するとproperty、 a 内のそれぞれがデータベース上classの特定の にマップされます。fieldtable

PHP を使用しているため、 Zend_DbまたはCodeIgniter Active Recordを使用した場合は、このパターンを既に使用している可能性があります。

このパターンの問題点は、大量の継承が使用され、詳細なマッピングが必要な複雑なドメインには適していない可能性があることです。また、通常、クラスをデータベースと密結合するため、テストが悪化する可能性があります。

参照:ウィキペディアファウラー

オブジェクト リレーショナル マッパー (ORM)

「ORM」ははるかに重いソリューションであり、純粋に「オブジェクト」を操作して、テーブル/データベース層を完全に抽象化できます。

また、オブジェクトの継承、構成、ポリモーフィズムを処理できる必要があり、通常、参照されるオブジェクトの「遅延読み込み」のための機能を提供します。

PHP の注目すべき ORM は (たとえば) DoctrinePropelです。

参照:ウィキペディア

于 2013-07-30T13:24:52.767 に答える