1. 程式人生 > 程式設計 >PHP實現單例模式建立資料庫連線的方法分析

PHP實現單例模式建立資料庫連線的方法分析

本文例項講述了PHP實現單例模式建立資料庫連線的方法。分享給大家供大家參考,具體如下:

理解php單例模式

一、什麼是單例

wiki百科:單例模式,也叫單子模式,是一種常用的軟體設計模式。 在應用這個模式時,單例物件的類必須保證只有一個例項存在。 許多時候整個系統只需要擁有一個的全域性物件,這樣有利於我們協調系統整體的行為。

二、為什麼用單例

實際專案中像資料庫查詢,日誌輸出,全域性回撥,統一校驗等模組。這些模組功能單一,但需要多次訪問,如果能夠全域性唯一,多次複用會大大提升效能。這也就是單例存在的必要性。

三、單例模式的好處

1:減少頻繁建立,節省了cpu。

2:靜態物件公用,節省了記憶體。

3:功能解耦,程式碼已維護。

四、如何設計單例

通過上面的描述,單例的核心是,例項一次生成,全域性唯一,多次呼叫。因此在單例模式必須包含三要素:

1:私有化建構函式,私有化clone。也就是不能new,不能clone。【唯一】

2:擁有一個靜態變數,用於儲存當前的類。【唯一如何儲存】

3:提供一個公共的訪問入口。【可以訪問】

五、建立資料庫連線

PS:功能上不太完整,以後再補充**__**

/**
 * 單例模式連線資料庫--面向物件
 * */
//final關鍵字阻止此類被繼承
final class sql2
{
  static $instance;
  static $connect;
  protected $result;
  //protected關鍵字阻止此類在外部進行例項化
  protected function __construct($host,$user,$password)
  {
    self::$connect = @new mysqli($host,$password);
    if (self::$connect->connect_errno) {
      die(iconv('gbk','utf-8',self::$connect->connect_error) . '(' . self::$connect->connect_errno . ')');
    }
  }
  //protected關鍵字阻止此類在外部進行克隆
  protected function __clone()
  {
  }
  //當物件被銷燬時關閉連線
  function __destruct()
  {
    self::$connect->close();
  }
  //獲取例項
  static function getInstance($host,$password)
  {
    self::$instance = self::$instance ?: new self($host,$password);
    return self::$instance;
  }
  //選擇資料庫
  function set_db($db)
  {
    if (!self::$connect->select_db($db)) {
      die(iconv('gbk',self::$connect->error) . '(' . self::$connect->errno . ')');
    }
  }
  //執行SQL語句
  function query($query)
  {
    if (!($re = self::$connect->query($query))) {
      die(iconv('gbk',self::$connect->error) . '(' . self::$connect->errno . ')');
    }
    $this->result = $re;
    return $re;
  }
  //以陣列形式返回查詢結果
  function fetch_arr($query)
  {
    $re = $this->query($query);
    $res = [];
    while ($row = $re->fetch_assoc()) {
      $res[] = $row;
    }
    return $res;
  }
  //獲取記錄數
  function get_row()
  {
    return $this->result->num_rows;
  }
}
$ins = sql2::getInstance('127.0.0.1','root','root');
$ins->set_db('houtai');
$re = $ins->fetch_arr('select * from user ');
//var_dump($re);
$ins->get_row();

更多關於PHP相關內容感興趣的讀者可檢視本站專題:《php面向物件程式設計入門教程》、《PHP陣列(Array)操作技巧大全》、《PHP基本語法入門教程》、《PHP運算與運算子用法總結》、《php字串(string)用法總結》、《php+mysql資料庫操作入門教程》及《php常見資料庫操作技巧彙總》

希望本文所述對大家PHP程式設計有所幫助。