管理具有多个上下文的对象

时间:2012-01-16 19:18:43

标签: php oop object

问题:

是否有一种首选的设计模式用于在不同的上下文中处理对象?例如:如果我需要从数据库中获取用户,则该对象需要具有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...
        }
    }
?>    

1 个答案:

答案 0 :(得分:0)

使用提供的类,您始终可以将$this->id的值自动初始化为0,并使用它来确定此用户是否为来宾。主要的想法是,您的数据库中永远不会有id为0(如果您使用此列的自动增量)。

这也可用于检查您是要更新还是创建记录。对id的简单检查将显示0或另一个int。如果它是0,那么它是guest或者它应该被创建。如果它大于0,则它已经创建并且需要更新。

通常,我更喜欢通过添加load()update()create()delete()方法将创建和更新打包到用户类本身,其中{{1}接受一个数组/对象,如果传递将用于将数据加载到当前上下文中,或者如果没有提供,则该函数将尝试从不同的源(例如DB)读取数据。