PHP OOP在实例中保存对象的实例还是仅保存id?

PHP OOP在实例中保存对象的实例还是仅保存id?,php,oop,instance,Php,Oop,Instance,我有点困惑如何在PHP中实现以下OO结构。我有一个类“User”和一个类“UserGroup”,“User”是一个“UserGroup”的一部分。在数据库中,用户表有一个字段“user\u group\u id”。实现这一点的“服务器友好”的好方法是什么?我是在用户类中创建UserGroup的实例,还是只在变量中保存用户组id 注:并非所有方法都显示在示例中 选项1 class User { private $userGroupId; public function setGro

我有点困惑如何在PHP中实现以下OO结构。我有一个类“
User
”和一个类“
UserGroup
”,“User”是一个“UserGroup”的一部分。在数据库中,用户表有一个字段“
user\u group\u id
”。实现这一点的“服务器友好”的好方法是什么?我是在用户类中创建UserGroup的实例,还是只在变量中保存用户组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的问题是,它可能会消耗更多的服务器资源,因为它会为每个用户创建一个全新的用户组实例。但我对此不确定,也找不到任何相关信息


我的问题:什么是好的实现?

这是一个需要解决的有点复杂的问题,但简短的回答是两者兼而有之。数据库本身只能存储用户组ID,但您的模型应该同时具有这两个ID。应该从数据库中提取用户组ID,您可以使用PHP magic
\uuuuu get
\uuuu set
方法在访问时加载用户组模型,并在提交时从用户组模型保存ID

还可以在UserGroup类中使用静态数组来保存所有水合用户组模型,因此,如果多次请求相同的模型,则可以返回相同的实例

编辑:正如Del Pedro在评论中指出的那样,这在以前(ORMs)就已经做过,如果它对您有好处,您应该利用它。

这是典型的has-在
用户
用户组
之间的关系。换句话说,
User
有一个
UserGroup
。所以我认为类
User
应该引用
UserGroup
。如果您太担心和/或资源有限,您可以在实际需要时在
User
中创建
UserGroup
的实例

实施将类似于:

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

这称为两个实体之间的关系。可能使用orm,如“条令”或“推进”,谢谢!这个答案与@Ryan P的答案结合起来,让事情变得更清楚。我的问题是,我会制作很多实际上是相同的实例。但是对于静态数组,这应该可以解决问题。谢谢大家<代码>您还可以在UserGroup类中使用静态数组来保存所有水合用户组模型,因此,如果多次请求相同的模型,则可以返回相同的实例。