欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

PHP實現(xiàn)單例模式建立數(shù)據(jù)庫連接的方法分析

 更新時間:2020年02月11日 12:01:25   作者:Karagrade  
這篇文章主要介紹了PHP實現(xiàn)單例模式建立數(shù)據(jù)庫連接的方法,結(jié)合實例形式分析了PHP單例模式的概念、原理及使用單例模式實現(xiàn)數(shù)據(jù)庫連接的相關(guān)操作技巧,需要的朋友可以參考下

本文實例講述了PHP實現(xiàn)單例模式建立數(shù)據(jù)庫連接的方法。分享給大家供大家參考,具體如下:

理解php單例模式

一、什么是單例

wiki百科:單例模式,也叫單子模式,是一種常用的軟件設(shè)計模式。 在應(yīng)用這個模式時,單例對象的類必須保證只有一個實例存在。 許多時候整個系統(tǒng)只需要擁有一個的全局對象,這樣有利于我們協(xié)調(diào)系統(tǒng)整體的行為。

二、為什么用單例

實際項目中像數(shù)據(jù)庫查詢,日志輸出,全局回調(diào),統(tǒng)一校驗等模塊。這些模塊功能單一,但需要多次訪問,如果能夠全局唯一,多次復(fù)用會大大提升性能。這也就是單例存在的必要性。

三、單例模式的好處

1:減少頻繁創(chuàng)建,節(jié)省了cpu。

2:靜態(tài)對象公用,節(jié)省了內(nèi)存。

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

四、如何設(shè)計單例

通過上面的描述,單例的核心是,實例一次生成,全局唯一,多次調(diào)用。因此在單例模式必須包含三要素:

1:私有化構(gòu)造函數(shù),私有化clone。也就是不能new,不能clone?!疚ㄒ弧?/p>

2:擁有一個靜態(tài)變量,用于保存當前的類?!疚ㄒ蝗绾伪4妗?/p>

3:提供一個公共的訪問入口?!究梢栽L問】

五、建立數(shù)據(jù)庫連接

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

/**
 * 單例模式連接數(shù)據(jù)庫--面向?qū)ο?
 * */
//final關(guān)鍵字阻止此類被繼承
final class sql2
{
  static $instance;
  static $connect;
  protected $result;
  //protected關(guān)鍵字阻止此類在外部進行實例化
  protected function __construct($host, $user, $password)
  {
    self::$connect = @new mysqli($host, $user, $password);
    if (self::$connect->connect_errno) {
      die(iconv('gbk', 'utf-8', self::$connect->connect_error) . '(' . self::$connect->connect_errno . ')');
    }
  }
  //protected關(guān)鍵字阻止此類在外部進行克隆
  protected function __clone()
  {
  }
  //當對象被銷毀時關(guān)閉連接
  function __destruct()
  {
    self::$connect->close();
  }
  //獲取實例
  static function getInstance($host, $user, $password)
  {
    self::$instance = self::$instance ?: new self($host, $user, $password);
    return self::$instance;
  }
  //選擇數(shù)據(jù)庫
  function set_db($db)
  {
    if (!self::$connect->select_db($db)) {
      die(iconv('gbk', 'utf-8', self::$connect->error) . '(' . self::$connect->errno . ')');
    }
  }
  //執(zhí)行SQL語句
  function query($query)
  {
    if (!($re = self::$connect->query($query))) {
      die(iconv('gbk', 'utf-8', self::$connect->error) . '(' . self::$connect->errno . ')');
    }
    $this->result = $re;
    return $re;
  }
  //以數(shù)組形式返回查詢結(jié)果
  function fetch_arr($query)
  {
    $re = $this->query($query);
    $res = [];
    while ($row = $re->fetch_assoc()) {
      $res[] = $row;
    }
    return $res;
  }
  //獲取記錄數(shù)
  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();

更多關(guān)于PHP相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《php面向?qū)ο蟪绦蛟O(shè)計入門教程》、《PHP數(shù)組(Array)操作技巧大全》、《PHP基本語法入門教程》、《PHP運算與運算符用法總結(jié)》、《php字符串(string)用法總結(jié)》、《php+mysql數(shù)據(jù)庫操作入門教程》及《php常見數(shù)據(jù)庫操作技巧匯總

希望本文所述對大家PHP程序設(shè)計有所幫助。

相關(guān)文章

最新評論