php – 创建一个全局可访问的MySQLi对象

我有多个类使用静态方法.这些功能使用数据库连接
$MysqLi = new MysqLi(DB_SERVER,DB_USER,DB_PASS,DB_NAME);

其中常量DB_SERVER,DB_NAME是在全局可访问文件中定义的数据库变量.最近,我的网站开始慢了,在剖析了脚本后,我意识到创建对象($MysqLi)的调用导致了这个问题.

我的大部分班级都从MysqLi延伸出来

public function __construct($user_id) {
    parent::__construct(DB_SERVER,DB_NAME);
    $this->retrieve_user_details($user_id);
    $this->check_user_account_type();

}

这是我的理解,静态方法不要使用__construct方法.

有人可以指导我如何创建$MysqLi对象一次,以便它可以被所有需要它的静态方法访问.

这是一种方法

创建一个可以从任何地方静态访问的单例类.

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,d) ;

那么你可以将该对象传递给其他类(构造函数)

class Shop {
  private $MysqLi ;
  public function __construct(MysqLi $MysqLi){
    $this->MysqLi = $MysqLi ;
  }
}

$show = new Shop($MysqLi) ;

相关文章

统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
前言 之前做了微信登录,所以总结一下微信授权登录并获取用户...
FastAdmin是我第一个接触的后台管理系统框架。FastAdmin是一...
之前公司需要一个内部的通讯软件,就叫我做一个。通讯软件嘛...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...