【php】利用單例模式設計資料庫連接Model類

來源:互聯網
上載者:User

之前在《【php】利用php的建構函式與解構函式編寫Mysql資料庫查詢類》(點擊開啟連結)寫過的Mysql資料庫查詢類還不夠完美,利用《【Java】單例模式》(點擊開啟連結)介紹的思想可以將這個資料庫連結類搞成單例,不會因為多個使用者訪問網站就建立一個資料庫查詢執行個體,拖慢整個網站的速度,讓網站的資料庫壓力比較大,造成網站的速度下降得很厲害。

單例實現最關鍵的,還是那3點:

1、私人建構函式,這裡無須像Java那樣私人無參數的建構函式,php不允許有多個建構函式——即使這些建構函式參數不同也不可以。

2、私人複製類的函數

3、暴露一個公有的“創造執行個體函數”供調用,這個“創造執行個體函數”判斷如果已存在相應執行個體,返回此執行個體,沒有才建立。

這樣保證此資料庫連接類有且只有一個。

直接用一個例子說明,資料庫test中有表user


先利用利用單例模式設計資料庫連接Model類,將這張表的內容查詢到網頁上:


具體代碼如下:

<?phpclass db{private $link;//db類單例開始//儲存類執行個體的私人靜態成員變數private static $_instance;//定義一個私人的建構函式,確保單例類不能通過new關鍵字執行個體化,只能被其自身執行個體化private function __construct($host,$username,$password,$database){$this->link=mysql_connect($host,$username,$password);if(!$this->link){die("串連失敗。");}mysql_query("set names utf8;");mysql_select_db($database);}//定義私人的__clone()方法,確保單例類不能被複製或複製private function __clone(){}public static function getInstance($host, $username, $password,$database) {//檢測類是否被執行個體化if(!(self::$_instance instanceof self)){self::$_instance=new db($host,$username,$password,$database);}return self::$_instance;}//執行SQL語句public function query($query){return mysql_query($query, $this->link);}//關閉資料庫連接public function close(){return mysql_close($this->link);}}//調用單例類測試部分header("Content-type: text/html; charset=utf-8"); //設定網頁編碼$dbconnector=db::getInstance("localhost","root","root","test");//建立資料庫連接類$result=$dbconnector->query("select * from user");//查詢資料庫for($i=0;$row=mysql_fetch_array($result);$i++){//列印查詢結果echo $row['id'].",".$row['username'].",".$row['password']."<br/>";}  ?>

這樣保證了class db所對應的執行個體$dbconnector有且只有一個,再有一句:

$dbconnector1=db::getInstance("localhost","root","root","test");//建立資料庫連接類

還是會返回原來的已經建立執行個體$dbconnector,更應該說操作$dbconnector與$dbconnector1是同樣的效果,它們就是同一個東西,不會在伺服器的記憶體上多開闢資源來存放$dbconnector與$dbconnector1,因為db被單例了,從而達到減少資料庫壓力的目的。
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.