2

PHPで次のOO構造を実装する方法が少し混乱しています。クラス' User'があり、クラス' UserGroup'a'User'は1つの'UserGroup'の一部です。データベースでは、ユーザーテーブルにフィールド' user_group_id'があります。これを実装するための優れた「サーバーフレンドリー」な方法は何ですか?ユーザークラス内にUserGroupのインスタンスを作成しますか、それともuser_group_idのみを変数に保存しますか?

注:すべてのメソッドが例に示されているわけではありません。

オプション1

class User
{
    private $userGroupId;
    public function setGroupId($userGroupId)
    {
        $this->userGroupId = $userGroupId;
    }
}

オプション2

class User
{
    private $userGroup;
    public function setGroup($userGroupId)
    {
        $this->userGroup = new UserGroup($userGroupId);
    }
}

オプション2の私の問題は、すべてのユーザーに対してユーザーグループのまったく新しいインスタンスを作成するため、より多くのサーバーリソースを消費する可能性があることです。しかし、私はこれについてよくわかりません、そして私はこれについての情報を見つけることができません。

私の質問:良い実装とは何ですか?

4

2 に答える 2

3

これは典型的なものです-Userとの間の関係UserGroup。言い換えればUser、がありUserGroupます。Userしたがって、クラスはを参照する必要があると思いますUserGroup。心配しすぎたり、リソースが限られている場合は、実際に必要なときにUserGroupinのインスタンスを作成できます。User

実装は次のようになります。

class User
{
    private $userGroupId;
    private $userGroup = null;
    public function setGroupId($userGroupId)
    {
        $this->userGroupId = $userGroupId;
    }

    public function getGroup()
    {
        if ($this->userGroup === null)
        {
            $this->userGroup = new UserGroup($this->userGroupId);
        }
        return $this->userGroup;
    }
}
于 2012-10-11T14:59:19.373 に答える
0

これは解決するのがやや複雑な問題ですが、簡単な答えは両方です。データベース自体はユーザーグループIDのみを保存できますが、モデルには両方が含まれている必要があります。ユーザーグループIDはデータベースから取得する必要があり、PHPの魔法__get__setメソッドを使用して、アクセス時にUserGroupモデルをロードし、コミット時にUserGroupモデルからIDを保存できます。

UserGroupクラスの静的配列を使用して、すべてのハイドレイトされたUserGroupモデルを保持することもできるため、同じモデルが複数回要求された場合、同じインスタンスを返すことができます。

編集:Del Pedroがコメントで指摘したように、これは以前に行われたことがあり(ORM)、それがあなたに利益をもたらす場合はそれを利用する必要があります。

于 2012-10-11T14:58:58.877 に答える