PHP OOP User class


PHP OOP User class

我目前正在编写一个完整的应用程序。当然,最重要的功能之一是用户管理。我想得很周全,但有一个问题我还是不确定。

用户类应该包含什么,不应该包含什么

我在user对象中至少保存user_id和username似乎是合乎逻辑的。因此,我会经常需要这个。但电子邮件、地址、真实姓名等信息呢。。。你会把这些信息也放在User对象中吗?

我想按以下方式做:我将user_id和username保存在对象本身中,这样我就可以使用方法liek-getUserId()和getUsername()访问它。令人惊讶的是,这种方法将返回$This->userId和$This->username。

关于其他信息,比如地址,我想添加的方法也有。但我不会将这些信息存储在实例变量中。就像方法getAddress()会调用UserMapper一样,我也会在那里创建一个方法来获取地址。

<?php
//UserMapper
public function getAdress() {
 $this->database->query('SELECT adress FROM users WHERE user_id = ?', array($this->getUserId));
 return $database('adress');
}
//User
public function getAdress() {
 return $this->userMapper->getAdress();
}
?>

或者我应该为这些信息创建另一个类吗?

区分用户和个人很重要。

一个人有他的名字、地址、出生日期和其他事实。用户拥有凭证、机密问题、系统权限等。

现在,问问自己用户和人之间的关系是什么。正如上面Brian所回答的那样,默认情况下将两者分为不同的类和表是一个好主意,因为这样以后会更容易。

以下是一些打破这些局面的理由。

  1. 一个用户可能会在其存在的整个过程中保持不变,而附着在该用户身上的人可能不会
  2. 在权限和角色的上下文中很少需要有关人员的信息,因此这是不必要地在用户类中浮动的额外数据。此列表继续

我通常把用户的东西分成以下几个类

   User (
        id
        login
        password
        password_expiredate
        enabled
        otherflags
        ) //(occasionally email, if it is used as login)
   Person (
        pid     // If it is not one to one between user and person
        user_id FK
        Name
        DOB
        Email 
        other relevant information
       )
   Address
       ( 
       person_pid
       type //home,work, etc
       Street
       City
       State
       Zip
       Country
       )
   Phone
      (
       person_pid
       type
       number
      )

至于创建类,一般来说,我不确定这是否是一种好的做法,但我允许用户包含一个人,而这个人又包含具有相应功能的Address和Phone类。

根据我的经验,结构的规范化允许灵活开发将使用人员和用户的业务规则。

此外,一个人不一定是用户。

一些想法。。。

您可能有系统的用户,并且您可能具有不同于任何用户的管理凭据。我倾向于避免使用"user"作为类的名称,通常更喜欢使用"login"和/或"credential"之类的名称

您可能有多种类型的凭据。。。除了用户名/密码,您可能还有oauth、openid等凭据。通常,"用户名"将是一个电子邮件地址。

可能已经有库可以处理你想做的事情了

我可能会将用户的联系信息与登录凭据分开存储,但这取决于应用程序的类型。。具体地说,这取决于任何给定的"用户"是否总是有一个并且只有一个物理地址

一旦你有了某种登录类,我就会倾向于有某种权限类,将登录连接到他们有权查看/更新的对象。

顺便说一句,你把地址拼写错了。