PHP OOP在实例中保存对象的实例还是仅保存id?
我有点困惑如何在PHP中实现以下OO结构。我有一个类“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
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类中使用静态数组来保存所有水合用户组模型,因此,如果多次请求相同的模型,则可以返回相同的实例。