程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> PHP基礎知識 >> PHP設計模式之單例模式

PHP設計模式之單例模式

編輯:PHP基礎知識
 

單例模式:使得類的一個對象成為系統中的唯一實例.

PHP中使用單例模式最常見的就是數據庫操作了。避免在系統中有多個連接數據庫的操作,浪費系統資源的現象,就可以使用單例模式。每次對數據庫操作都使用一個實例。

簡單示例


class AClass {  
    // 用來存儲自己實例  
    public static $instance;  
      
    // 私有化構造函數,防止外界實例化對象   
    private function __construct() {}  
      
    // 私有化克隆函數,防止外界克隆對象   
    private function __clone() {}  
      
    // 靜態方法,單例訪問統一入口 
    public static function getInstance() {  
        if (!(self::$instance instanceof self)){  
            self::$instance = new self();  
        }  
        return self::$instance;  
    }  
      
    // test
    public function test() {  
        return "done";  
    }  

    // 私有化克隆函數,防止外界克隆對象   
    private function __clone() {}  

}
class BClass extends AClass{
}

// 獲取實例  
$aclass = AClass::getInstance();
$bclass = BClass::getInstance();

// 調用方法
echo $aclass->test();


對一些比較大型的應用來說,可能連接多個數據庫,那麼不同的數據庫公用一個對象可能會產生問題,比如連接句柄的分配等,我們可以通過給$instance變成數組,通過不同的參數來控制

簡單示例

class DB {  
    // 用來存儲自己實例  
    public static $instance = array();  
	public $conn;
      
    // 私有化構造函數,防止外界實例化對象   
    private function __construct($host, $username, $password, $dbname, $port) {	
		$this->conn = new mysqli($host, $username, $password, $dbname, $port);	
	
	}   

      
    // 靜態方法,單例訪問統一入口 
    public static function getInstance($host, $username, $password, $dbname, $port) {  
		$key = $host.":".$port;
        if (!(self::$instance[$key] instanceof self)){  
            self::$instance[$key] = new self($host, $username, $password, $dbname, $port);#實例化  
        }  
        return self::$instance[$key];  
    }  
      
    //query
    public function query($ql) {  
        return $this->conn->query($sql);
    }  


	// 私有化克隆函數,防止外界克隆對象   
    private function __clone() {}  

	//釋放資源
    public function __destruct(){
        $this->conn->close();
    }


}


 
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved