久久久久久久视色,久久电影免费精品,中文亚洲欧美乱码在线观看,在线免费播放AV片

<center id="vfaef"><input id="vfaef"><table id="vfaef"></table></input></center>

    <p id="vfaef"><kbd id="vfaef"></kbd></p>

    
    
    <pre id="vfaef"><u id="vfaef"></u></pre>

      <thead id="vfaef"><input id="vfaef"></input></thead>

    1. 站長資訊網(wǎng)
      最全最豐富的資訊網(wǎng)站

      一招解決 PHP 單例模式解析和實戰(zhàn)

      我們學習了解了這么多關于PHP的知識,今天學習如何一招解決 PHP 單例模式解析和實戰(zhàn),不知你們是否已經(jīng)完全掌握了呢,如果沒有,那就跟隨本篇文章一起繼續(xù)學習吧

      一、什么是單例模式?

      1、含義

      作為對象的創(chuàng)建模式,單例模式確保某一個類只有一個實例,而且自行實例化并向整個系統(tǒng)全局地提供這個實例。它不會創(chuàng)建實例副本,而是會向單例類內部存儲的實例返回一個引用。

      2、單例模式的三個要點:

      (1). 需要一個保存類的唯一實例的靜態(tài)成員變量:

      private static $_instance;

      (2). 構造函數(shù)和克隆函數(shù)必須聲明為私有的,防止外部程序new類從而失去單例模式的意義:

      private function __construct()  {      $this->_db = pg_connect('xxxx'); }  private function __clone() { }//覆蓋__clone()方法,禁止克隆

      (3). 必須提供一個訪問這個實例的公共的靜態(tài)方法(通常為getInstance方法),從而返回唯一實例的一個引用

          public static function getInstance()       {           if(! (self::$_instance instanceof self) )          {               self::$_instance = new self();           }         return self::$_instance;        }

      二、為什么要使用單例模式?

      1、PHP缺點:

      PHP語言是一種解釋型的腳本語言,這種運行機制使得每個PHP頁面被解釋執(zhí)行后,所有的相關資源都會被回收。也就是說,PHP在語言級別上沒有辦法讓某個對象常駐內存,這和asp.net、Java等編譯型是不同的,比如在Java中單例會一直存在于整個應用程序的生命周期里,變量是跨頁面級的,真正可以做到這個實例在應用程序生命周期中的唯一性。然而在PHP中,所有的變量無論是全局變量還是類的靜態(tài)成員,都是頁面級的,每次頁面被執(zhí)行時,都會重新建立新的對象,都會在頁面執(zhí)行完畢后被清空,這樣似乎PHP單例模式就沒有什么意義了,所以PHP單例模式我覺得只是針對單次頁面級請求時出現(xiàn)多個應用場景并需要共享同一對象資源時是非常有意義的。

      2、單例模式在PHP中的應用場合:

      (1)、應用程序與數(shù)據(jù)庫交互

      一個應用中會存在大量的數(shù)據(jù)庫操作,比如過數(shù)據(jù)庫句柄來連接數(shù)據(jù)庫這一行為,使用單例模式可以避免大量的new操作,因為每一次new操作都會消耗內存資源和系統(tǒng)資源。

      (2)、控制配置信息

      如果系統(tǒng)中需要有一個類來全局控制某些配置信息, 那么使用單例模式可以很方便的實現(xiàn).

      三、如何實現(xiàn)單例模式?

      1、普通的數(shù)據(jù)庫訪問例子:

      <?php ...... //初始化一個數(shù)據(jù)庫句柄 $db = new DB(...);  //添加用戶信息 $db->addUserInfo(...);  ......  //在函數(shù)中訪問數(shù)據(jù)庫,查找用戶信息 function getUserInfo() {     $db = new DB(...);//再次new 數(shù)據(jù)庫類,和數(shù)據(jù)庫建立連接     $db = query(....);//根據(jù)查詢語句訪問數(shù)據(jù)庫 }  ?>

      2、應用單例模式對數(shù)據(jù)庫進行操作:

      <?php  class DB   {       private $_db;       private static $_instance;          private function __construct(...)       {           $this->_db = pg_connect(...);//postgrsql       }          private function __clone() {};  //覆蓋__clone()方法,禁止克隆          public static function getInstance()       {           if(! (self::$_instance instanceof self) ) {               self::$_instance = new self();           }           return self::$_instance;       }                public function addUserInfo(...)     {           }       public function getUserInfo(...)     {       }  }  //test  $db = DB::getInstance();  $db->addUserInfo(...);  $db->getUserInfo(...);   ?>

      3、深入理解

      <?php class db { 	public $conn; 	public static $sql; 	public static $instance=null; 	private function __construct(){ 		require_once('db.config.php'); 		$this->conn = mysql_connect($db['host'],$db['user'],$db['password']); 		if(!mysql_select_db($db['database'],$this->conn)){ 			echo "失敗"; 		}; 		mysql_query('set names utf8',$this->conn);		 	} 	public static function getInstance(){ 		if(is_null(self::$instance)){ 			self::$instance = new db; 		} 		return self::$instance; 	} 	/** 	 * 查詢數(shù)據(jù)庫 	 */ 	public function select($table,$condition=array(),$field = array()){ 		$where=''; 		if(!empty($condition)){ 			 			foreach($condition as $k=>$v){ 				$where.=$k."='".$v."' and "; 			} 			$where='where '.$where .'1=1'; 		} 		$fieldstr = ''; 		if(!empty($field)){ 			 			foreach($field as $k=>$v){ 				$fieldstr.= $v.','; 			} 			 $fieldstr = rtrim($fieldstr,','); 		}else{ 			$fieldstr = '*'; 		} 		self::$sql = "select {$fieldstr} from {$table} {$where}"; 		$result=mysql_query(self::$sql,$this->conn); 		$resuleRow = array(); 		$i = 0; 		while($row=mysql_fetch_assoc($result)){ 			foreach($row as $k=>$v){ 				$resuleRow[$i][$k] = $v; 			} 			$i++; 		} 		return $resuleRow; 	} 	/** 	 * 添加一條記錄 	 */ 	 public function insert($table,$data){ 	 	$values = ''; 	 	$datas = ''; 	 	foreach($data as $k=>$v){ 	 		$values.=$k.','; 	 		$datas.="'$v'".','; 	 	} 	 	$values = rtrim($values,','); 	 	$datas   = rtrim($datas,','); 	 	self::$sql = "INSERT INTO  {$table} ({$values}) VALUES ({$datas})"; 		if(mysql_query(self::$sql)){ 			return mysql_insert_id(); 		}else{ 			return false; 		}; 	 } 	 /** 	  * 修改一條記錄 	  */ 	public function update($table,$data,$condition=array()){ 		$where=''; 		if(!empty($condition)){ 			 			foreach($condition as $k=>$v){ 				$where.=$k."='".$v."' and "; 			} 			$where='where '.$where .'1=1'; 		} 		$updatastr = ''; 		if(!empty($data)){ 			foreach($data as $k=>$v){ 				$updatastr.= $k."='".$v."',"; 			} 			$updatastr = 'set '.rtrim($updatastr,','); 		} 		self::$sql = "update {$table} {$updatastr} {$where}"; 		return mysql_query(self::$sql); 	} 	/** 	 * 刪除記錄 	 */ 	 public function delete($table,$condition){ 	 	$where=''; 		if(!empty($condition)){ 			 			foreach($condition as $k=>$v){ 				$where.=$k."='".$v."' and "; 			} 			$where='where '.$where .'1=1'; 		} 		self::$sql = "delete from {$table} {$where}"; 		return mysql_query(self::$sql); 		 	 } 	 	public static function getLastSql(){ 		echo self::$sql; 	} 	 	 	 }  $db = db::getInstance(); //$list = $db->select('demo',array('name'=>'tom','password'=>'ds'),array('name','password')); //echo $db->insert('demo',array('name'=>'最近你啦','password'=>'123')); //echo $db->update('demo',array("name"=>'xxx',"password"=>'123'),array('id'=>1)); echo $db->delete('demo',array('id'=>'2')); db::getLastSql(); echo "<pre>"; ?>

      推薦學習:《PHP視頻教程》

      贊(0)
      分享到: 更多 (0)
      網(wǎng)站地圖   滬ICP備18035694號-2    滬公網(wǎng)安備31011702889846號