PHP登录对象构造函数(extends class)逻辑

时间:2015-04-11 02:20:51

标签: php

我有一个登录系统,可以在登录时从类创建一个USER对象,我有兴趣通过将User类扩展到Admin,Staff,Moderator等来使其更好。

每个班级都有自己的功能/能力,但我不知道如何做以下几个。

目前我这样做: $user = new User();

比这个$ user尝试登录等等。

我该怎么做这样的事情: $user->login()如果用户是admin,则创建$admin = new Admin();

我对我相信的逻辑部分有困难。

谢谢

我当前的用户构造函数:

public function __construct($user = null){
        $this->_db = DB::getInstance();
        $this->_sessionName = Config::get('session/session_name');

        if(!$user){
            if(Session::exists($this->_sessionName)){
                $user = Session::get($this->_sessionName);
                if($this->find($user)){
                    $this->_isLoggedIn = TRUE;
                    // GRAB THE ID of user for pulling info from the personal
                    $userId = $this->_data->id;
                    $this->_data = $this->data();
                }else{
                    $this->logout();}
            }
        }else {
            $this->find($user);
        }
    }

2 个答案:

答案 0 :(得分:1)

为什么您的用户构造函数知道如何使用会话? SOLID原则在哪里?这里只是一个非常简单的例子。创建不同用户类型的想法是使用Factory模式。我假设用户的类型存储在db。中的用户表中。

基本上,你需要:

class User
class Admin inherits User
class Moderator inherits User
class Auth // knows to do authorization
class UserFactory // knows to create needed user


class UserFactory
{
    public static function create($data)
    {
       $type = $userData['type'];

       switch ($type) {
        case "admin":
            return new Admin($data);
            break;
        case "moderator":
            return new Moderator ($data);
            break;
        default:
            return new User($data);
       }
    }
}

class Auth() {

   public login($username, $password) {
      // work with sessions, database
      $userData = $this->data();

      $user = UserFactory::create($userData);
      return $user;
  }
}

// just as an example
$auth = new Auth();
$user = $auth->login($username, $password);

答案 1 :(得分:-1)

使用dependency injection

function createUser(User user){
    $this->user = user;
}

您可以将User,Admin ...传递给此功能