php - public __construct ,检索用户信息类
问题描述
我正在寻找创建一个类并私下检索帐户信息,然后公开 Getters 您对改进此代码有什么建议吗?
private $db;
private $get;
public function __construct($db = null)
{
$this->db = new Database();
}
private function get($information = 0, $userid = null)
{
if ($userid === null)
{
//if ($this->isOnline()) {
$token = $_COOKIE['session'];
$req = $this->db->query('SELECT user_id FROM cms_sessions WHERE token = :token',
array(
"token" => $token
));
$userid = $req[0]['user_id'];
//}
}
$req = $this->db->query('SELECT '. $information .' FROM users INNER JOIN users_info ON users.id = users_info.user_id WHERE users.id = :userid',
array(
"userid" => $userid
));
return (count($req) > 0) ? htmlspecialchars($req[0][$information]) : "Erreur";
}
public function getId()
{
$req = $this->db->query('SELECT user_id FROM cms_sessions WHERE token = :token',
array(
"token" => @$_COOKIE['session']
));
return (count($req) > 0) ? intval($req[0]['user_id']) : "0";
}
public function getIP()
{
return $this->get('last_ip');
}
public function getGender()
{
return $this->get('gender');
}
}
但是一旦我尝试检索用户信息,这给了我“0”谢谢您的回复!亲切地
解决方案
欢迎来到堆栈溢出!
“改进”是一个非常主观的话题。如果我正确理解您的代码,那么我个人会稍微解耦逻辑。在您的具体情况下,我将使用一个存储库来访问数据库并返回一个模型,它将拥有您的公共吸气剂。
class User
{
private $attributes = [];
public function __construct(array $attributes)
{
$this->attributes = $attributes;
}
public function getId()
{
return $this->attributes['id'];
}
public function getIP()
{
return $this->attributes['last_ip'];
}
public function getGender()
{
return $this->attributes['gender'];
}
}
class UserRepository
{
private $db;
public function __construct(Database $db)
{
$this->db = $db;
}
public function getById($id)
{
$result = $this->db->query('SELECT * FROM ... WHERE userid = :userid', ['userid' => $id]);
return new User($result);
}
public function getByToken($token)
{
$result = $this->db->query('SELECT * FROM ... WHERE token = :token', ['token' => $token]);
return new User($result);
}
}
最后你可以像这样使用它:
$repository = new UserRepository(new Database());
if (!empty($_COOKIE['session'])) {
$user = $repository->getByToken($_COOKIE['session']);
} else if ($userid > 0) {
$user = $repository->getById($userid);
} else {
// Pseudo exit here. You should handle this accordingly.
exit('User does not exist / not logged in');
}
echo $user->getId();
echo $user->getIP();
echo $user->getGender();
推荐阅读
- ssas - 使用 MDX 是否有一种通用方法来计算单元格相对于特定层次结构的选定成员的比率?
- windows - 如何在 Windows 10 上逐步设置 Spark
- json - REST资源与Spring boot的关系
- python-3.x - 当训练数据对 fit() 太大时,如何知道何时在 keras 中使用 fit_generator()?
- html - 我们可以在 AMP iframe 中添加非 AMP HTML 吗?
- python - 用列表理解替换字符串时出现 TypeError
- java - 匹配列表中的字符串并提取值
- sql - 如何从具有不同卫星的集线器中删除数据?
- javascript - 如何在我的应用程序中注入模板部分?
- acumatica - 设计器模式下 ListView 页面上的错误渲染控件(类型初始化程序 PX.Data.PXLicenseObserver 引发异常)