我正在使用一个Web应用程序,该应用程序每次打开且用户未登录时-默认设置应设置为连接到数据库:maindb
,无论何时用户登录,用户都应断开连接从maindb
数据库中获取并连接到他的“自己的”数据库。
我尝试使用if语句在会话中检查保存的customer_host
和customer
,但是PHP不允许我在类变量中执行此类操作。
我的问题是:
我如何创建这样的功能,即配置变量可以根据会话是否存在进行设置。 (使用对静态变量offcourse的调用)
我的情况是否可以使用这种结构/体系结构(“好的做法”)?
class Config
{
# Website main URL
const WEB_URL = 'https://potato.com/';
# Username
const DB_USERNAME = 'potato';
# Password
const DB_PASSWORD = 'disismyrealpassword';
# Set the DB servrer
static $DB_HOST = (Session::exists('customer_host')) ? Session::get('customer_host') : '127.0.0.1';
# Set DB name
static $DB_NAME = (Session::exists('customer')) ? Session::get('customer') : 'maindb';
# Sessopm name
static $session_name = 'user';
# token name
static $token_name = 'token';
PS:我不是一个决定为每个客户创建不同数据库的人,因此我无法在当前职位上更改该数据库,所以请..尝试着重解决 this 问题,而不是关注为什么我为每个用户有一个不同的数据库。
这是我的数据库类的一部分:
private $host;
private $user;
private $password;
private $dbname;
/*************/
/* METHODS */
/*************/
/**
* Get Database instance
*
*/
public static function getInstance()
{
if (!isset(self::$instance))
self::$instance = new Database();
return self::$instance;
}
/**
* Default Constructor
*
* 1. Instantiate Log class.
* 2. Creates the parameter array.
*/
private function __construct()
{
// Load defaults
$this->loadDefaults();
// INIT VARIABLES
$this->parameters = array();
// Connect with global vars.
$this->Connect($this->host, $this->user, $this->password, $this->dbname);
}
/**
*
* Method to load the object with the defaut settings
*
*/
private function loadDefaults() {
$this->user = Config::DB_USERNAME;
$this->password = Config::DB_PASSWORD;
$this->host = Config::$DB_HOST;
$this->dbname = Config::$DB_NAME;
}
如果您建议添加其他内容,请询问,我将进行编辑。
答案 0 :(得分:1)
在配置类中
注意:登录后,请重定向到其他页面
class Config {
static $DB_NAME_BEFORE_LOGIN = 'maindb';
static $DB_NAME_AFTER_LOGIN = 'own';
public static get_database(){
if(logged_in){
///do you logic and return the database name
self::$DB_NAME_AFTER_LOGIN;
}else{
//do your logic and return the database name
self::$DB_NAME_BEFORE_LOGIN;
}
}
}
在您的功能中
private function loadDefaults() {
$this->user = Config::DB_USERNAME;
$this->password = Config::DB_PASSWORD;
$this->host = Config::$DB_HOST;
$this->dbname = Config::get_database();
}