91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

PHP單例模式有什么用

發布時間:2021-07-15 11:12:24 來源:億速云 閱讀:145 作者:小新 欄目:開發技術

這篇文章給大家分享的是有關PHP單例模式有什么用的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

具體如下:

先簡單的介紹一下單例模式。單例模式就是在應用程序中保持某一個類實例只存在一個,而且不可以受外部環境的影響而生成這個類的第二個實例。它的優點,實際點見,如果在WEB開發中,保持單一個數據操作類實例的存在,可以減少不必要的多余連接數據庫資源的消耗,對于大型的軟件開發來說,可以使用單例來維持程序的狀態,使不同操作實現同步,因為單例一直占據內存,而從不會有副本。

而對于PHP,使用單例最常用的場合莫過于寫一個數據庫操作類。不過在PHP中實現單例,有以下規則:

1)單例類必須擁有一個現式聲明的構造函數,并且是私有的。

2)單例類必須有一個靜態變量來存儲類的實例,這樣可以保持這個單例類就只有那么一個實例。

3)單例類必須提供一個靜態方法,供其他所有的對象應用這個單例。

為什么要滿足以上三個條件呢:

1)因為單例類在整個應用程序運行時,只能被創造一次,而且這種創造是不是通過外部調用而完成,而是自身完成。所以單例類是自己實例化自己,所以其構造函數必須是私有。任何其他外部對象都不可以再次構造一個單例類的副本。

2)因為單例類只能夠自己實例化自己,而又要為所有外部應用提供自己的實例,所以類內部必須有一個可供外界訪問,而又是唯一不變的訪問存儲對象點,所以要提供一個靜態變量去存儲單例類自己實例化自己的那個實例對象。

3)因為單例類的構造函數是私有的,所以單例類必須提供一個外部接口供外部環境調用單例類,所以必須有一個靜態方法,它可以初始化單例類或者返回單例類的對象的引用。

一個簡單的例子:

class DB{
   private $_link;
   //   保持單例類的靜態變量
   static $_instance;
   //   私有的構造函數
   private function __construct(){
       $this->_link = @mysqli_connect(__HOST__, __USER__, __PASSWORD__, __DATABASE__);
       if(! ($this->_link)){
          echo 'Something wrong occurs on the database connection!';  
       }
   }
   //   防止單例類被克隆
   private function __clone(){}
   //   外界訪問單例類實例的接口
   public static function getInstance(){
       if(! (self::$_instance instanceof self)){
          self::$_instance = new self();
       }
       return self::$_instance;
   }
}

注意,以上定義的一個 __clone() 函數,防止單例類對象被克隆。

以下也是一個簡單的數據庫操作類的單例,供參考:

class DB {
   /**
    * the database connection
    * @var   resource
    * @access private
    */
   private $_link;
   /**
    * the static instance of single db
    * @var   object
    * @access static
    */
   static $_instance;
   /**
    * construct the single object
    * @return null
    * @access private
    */
   private function __construct(){
       $this->_link = @mysqli_connect(__HOST__, __USER__, __PASSWORD__, __DATABASE__);
       if(! ($this->_link)){
          echo 'Something wrong occurs on the database connection!';  
       }
   }
   /**
    * empty clone
    * @return null
    * @access private
    */
   private function __clone(){}
   /**
    * for other object to get the instance of db
    * @return self::instance
    * @access public
    */
   public static function getInstance(){
       if(! (self::$_instance instanceof self)){
          self::$_instance = new self();
       }
       return self::$_instance;
   }
   /**
    * query
    * @param  sql string
    * @param  message string
    * @return   resource
    * @access public
    */
   public function query($sql,$message){
       $result = @mysqli_query($this->$_link, $sql) or die($message . mysqli_error($this->$_link));
       return $result;
   }
   /**
    * mysqli_num_rows
    * @param  result resource
    * @return   int
    * @access public
    */
   public function num($result){
       return @mysqli_num_rows($result);
   }
   /**
    * mysqli_fetch_array
    * @param  result resource
    * @return   array
    * @access public
    */
   public function fetchArr($result){
       return @mysqli_fetch_array($result);
   }
   /**
    * mysqli_insert_id
    * @return   int
    * @access public
    */
   public function last_id(){
       return @mysqli_insert_id($this->_link);   
   }
   /**
    * close the database connection
    * @param  result resource
    * @return   null
    * @access public
    */
   public function close(){
       @mysqli_close($this->_link);
   }
   /**
    * fetch once result from the specific sql query
    * @param  sql string
    * @param  message string
    * @return   array
    * @access public
    */
   public function fetchArrOnce($sql, $message){
       $result = $this->query($sql, $message);
       $row = $this->fetchArr($result);
       return $row;
   }
   /**
    * fetch all results from the specific sql query
    * @param  sql string
    * @param  message string
    * @return   array
    * @access public
    */
   public function fetchArrMore($sql, $message){
       $result = $this->query($sql, $message);
       $moreRow = array();
       while($row = $this->fetchArr($result)){
          $moreRow[] = $row;
       }
       return $moreRow;
   }
   /**
    * fetch the number of results from the specific sql query
    * @param  sql string
    * @param  message string
    * @return   array
    * @access public
    */
   public function fetchNum($sql, $message){
       $result = $this->query($sql, $message);
       $resultNum = $this->num($result);
       return $resultNum;
   }
   /**
    * mysqli_prepare
    * @param  sql string
    * @return   stmt object
    * @access public
    */
   public function prepare($sql){
       return @mysqli_prepare($this->_link, $sql);
   }
   /**
    * mysqli_stmt_execute
    * @param  stmt object
    * @param  message string
    * @return   bool
    * @access public
    */
   public function stmt_execute($stmt, $message){
       @mysqli_stmt_execute($stmt) or die($message . mysqli_error($this->_link));
   }
}

使用:

define("__HOST__", "localhost");
define("__USER__", "root");
define("__PASSWORD__", "");
define("__DATABASE__", "eee");
$db = DB::getInstance();

感謝各位的閱讀!關于“PHP單例模式有什么用”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

php
AI

江川县| 万年县| 钟祥市| 朔州市| 福建省| 富锦市| 南投县| 荔浦县| 安塞县| 夏邑县| 屏东县| 寻乌县| 甘孜县| 池州市| 顺昌县| 苍溪县| 黑河市| 霞浦县| 剑河县| 本溪市| 剑川县| 新和县| 福海县| 陵川县| 时尚| 丹东市| 新干县| 舞钢市| 延津县| 虞城县| 黄石市| 北票市| 柏乡县| 镇远县| 分宜县| 万荣县| 青川县| 象山县| 镇康县| 龙海市| 内江市|