我有一个登录系统,可以在登录时从类创建一个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);
}
}
答案 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 ...传递给此功能