php – 创建一个全局可访问的MySQLi对象
发布时间:2020-12-13 16:31:36 所属栏目:PHP教程 来源:网络整理
导读:我有多个类使用静态方法.这些功能使用数据库连接 $mysqli = new mysqli(DB_SERVER,DB_USER,DB_PASS,DB_NAME); 其中常量DB_SERVER,DB_NAME是在全局可访问文件中定义的数据库变量.最近,我的网站开始慢了,在剖析了脚本后,我意识到创建对象($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) ; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |