问题:
是否有一种首选的设计模式用于在不同的上下文中处理对象?例如:如果我需要从数据库中获取用户,则该对象需要具有id和权限级别。但是,如果我想创建一个新用户进行注册,那么不需要一个id,因为这将通过auto_increment添加到数据库中。 GUEST用户不需要id,但应该有一个用户名'Guest'。
尝试解决方案
使用构造函数似乎忽略了上下文。
为registered_user,new_user和guest_user创建新对象似乎很浪费。
在用户对象中创建可用于以独特方式初始化它的方法很诱人。
截至目前,我相信我应该创建一个单独的工厂,其中包含create_guest($ x),create_new_user($ x,$ y),create_registered_user($ x,$ y, $ Z)?这将允许用户对象具有一个目的:保持用户(同时仍允许其具有构造函数以建立最低要求),并且还具有用户工厂,其唯一目的是:启动不同类型的用户。 / p>
请原谅任何无知,只是寻找在独特环境中处理同一物体的最佳设计模式。
示例:
<?php
class user
{
private id;
private username;
private privilege;
public function __construct()
{
some code...
}
public function is_admin()
{
some code...
}
}
?>
答案 0 :(得分:0)
使用提供的类,您始终可以将$this->id
的值自动初始化为0,并使用它来确定此用户是否为来宾。主要的想法是,您的数据库中永远不会有id为0(如果您使用此列的自动增量)。
这也可用于检查您是要更新还是创建记录。对id的简单检查将显示0或另一个int。如果它是0,那么它是guest或者它应该被创建。如果它大于0,则它已经创建并且需要更新。
通常,我更喜欢通过添加load()
,update()
,create()
和delete()
方法将创建和更新打包到用户类本身,其中{{1}接受一个数组/对象,如果传递将用于将数据加载到当前上下文中,或者如果没有提供,则该函数将尝试从不同的源(例如DB)读取数据。