通過PHP單例模式與長連線減少MySql連線數
在Mysql驅動的PHP網站中,MySql連線的一般都是利用指令碼的結束來進行釋放,在一些分層寫的php網站中,若一個頁面含有多個數據訪問類,由於每個資料訪問類都會有資料庫的連線,導致這一個頁面在指令碼結束前會有多個數據庫連線,在一些大型的頁面連線可能多至數十上百,為此需要進行必要的控制,對於解釋性的PHP語言,指令碼是順序執行的,也就是說資料庫連線的利用同時只有一個,根據這個特點,可以用單例模式來進行改造。
<?php class ConnecToDB { private static $instance; private function _constuct() { } //私有建構函式,防止外界構造新物件, public static function GetConnec() { if (!self::$instance instanceof self) { self::$instance =new self;//若當前物件例項不存在 } $temp=self::$instance; //獲取當前單例 return $temp::Con() ;//呼叫物件私有方法連線 資料庫 } //連線到資料庫 private static function Con() { try { $connec=mysqli_connect("127.0.0.1", "root", "root");//資料庫地址和密碼等 mysqli_select_db($connec, "dbname");//選擇資料庫 } catch (Exception $e) { echo $e->getMessage().'<br/>'; } return $connec; } } $db=new ConnecToDB(); $db->GetConnec();
當然這個程式碼中,資料庫的賬號、密碼等連線資訊都是硬編碼,可以通過改造GetConnec()函式注入相應的資訊。
通過這段指令碼,就可以控制一個頁面只有一次資料庫連線。