我有多个使用静态方法的类。这些函数使用
连接到数据库$mysqli = new mysqli(DB_SERVER, DB_USER, DB_PASS, DB_NAME);
其中常量DB_SERVER,DB_USER,DB_PASS,DB_NAME是在全局可访问文件中定义的数据库变量。最近,我的网站开始变慢,在对脚本进行分析后,我意识到创建对象($ mysqli)的调用导致了这个问题。
我的大多数课程都是从mysqli延伸出来的
public function __construct($user_id) {
parent::__construct(DB_SERVER, DB_USER, DB_PASS, DB_NAME);
$this->retrieve_user_details($user_id);
$this->check_user_account_type();
}
根据我的理解,静态方法不要使用__construct方法。
有人可以指导我如何创建$ mysqli对象,以便所有需要它的静态方法可以访问它。
答案 0 :(得分:4)
这是一种方法:
创建一个单例类,可以从任何地方静态访问。
class DBConnector {
private static $instance ;
public function __construct($host, $user, $password, $db){
if (self::$instance){
exit("Instance on DBConnection already exists.") ;
}
}
public static function getInstance(){
if (!self::$instance){
self::$instance = new DBConnector(a,b,c,d) ;
}
return $instance ;
}
}
一个例子是:
$mysqli = DBConnector::getInstance() ;
Hovewer我建议使用另一种解决方案:
$mysqli = new MySQLi(a,b,c,d) ;
然后你可以将该对象传递给其他类(构造函数)
class Shop {
private $mysqli ;
public function __construct(MySQLi $mysqli){
$this->mysqli = $mysqli ;
}
}
$show = new Shop($mysqli) ;
答案 1 :(得分:4)
详细说明一个mysqli单身人士:
define('SERVER', 'localhost');
define('USERNAME', 'root');
define('PASSWORD', 'password');
define('DATABASE', 'databaseName');
class mysqliSingleton
{
private static $instance;
private $connection;
private function __construct()
{
$this->connection = new mysqli(SERVER,USERNAME,PASSWORD,DATABASE);
}
public static function init()
{
if(is_null(self::$instance))
{
self::$instance = new mysqliSingleton();
}
return self::$instance;
}
public function __call($name, $args)
{
if(method_exists($this->connection, $name))
{
return call_user_func_array(array($this->connection, $name), $args);
} else {
trigger_error('Unknown Method ' . $name . '()', E_USER_WARNING);
return false;
}
}
}
然后,您可以通过调用:
来请求数据库连接$db = mysqliSingleton::init();
然后,您可以在自己的对象中检索数据库连接:
class yourClass
{
protected $db;
public function __construct()
{
$this->db = mysqliSingleton::init();
}
}
答案 2 :(得分:-3)
这是我为Bootstrap 3提出的最短版本。
$http.get('://www.drupal.org/files/issues/sample_7.png').success(function (t) {
$templateCache.put('img/help/copy_icon', t);
});