2

我有点困惑如何在 PHP 中实现以下 OO 结构。我有一个类“ User”和一个类“ 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

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

实现将类似于:

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 模型,因此如果多次请求相同的模型,则可以返回相同的实例。

编辑:正如德尔佩德罗在评论中指出的那样,这已经在(ORMs)之前完成了,如果它对您有利,您应该利用它。

于 2012-10-11T14:58:58.877 回答