一、單例模式可以保證一個對象只執行個體化一次,這個我該怎麼理解呢?是A使用者本次請求在這個進程中只是執行個體化一次還是A使用者執行個體化以後,B使用者在來訪問時如果A執行個體化也是用的A的,如果是按後者來說的話,那如下代碼也就是說資料庫的串連數只是一個咯?不是吧?(如下代碼)
class nmdb
{
private $link;static private $_instance;// 串連資料庫private function __construct($host, $username, $password){ $this->link = mysql_connect($host, $username, $password); $this->query("SET NAMES 'utf8'", $this->link); //echo mysql_errno($this->link) . ": " . mysql_error($link). "n"; //var_dump($this->link); return $this->link;}private function __clone(){}public static function get_class_nmdb($host, $username, $password){ //$connector = new nmdb($host, $username, $password); //return $connector; if( FALSE == (self::$_instance instanceof self) ) { self::$_instance = new self($host, $username, $password); } return self::$_instance;}// 串連資料表public function select_db($database){ $this->result = mysql_select_db($database); return $this->result;}// 執行SQL語句public function query($query){ return $this->result = mysql_query($query, $this->link);}// 將結果集儲存為數組public function fetch_array($fetch_array){ return $this->result = mysql_fetch_array($fetch_array, MYSQL_ASSOC);}// 獲得記錄數目public function num_rows($query){ return $this->result = mysql_num_rows($query);}// 關閉資料庫連接public function close(){ return $this->result = mysql_close($this->link);}
}
?>
回複內容:
一、單例模式可以保證一個對象只執行個體化一次,這個我該怎麼理解呢?是A使用者本次請求在這個進程中只是執行個體化一次還是A使用者執行個體化以後,B使用者在來訪問時如果A執行個體化也是用的A的,如果是按後者來說的話,那如下代碼也就是說資料庫的串連數只是一個咯?不是吧?(如下代碼)
class nmdb
{
private $link;static private $_instance;// 串連資料庫private function __construct($host, $username, $password){ $this->link = mysql_connect($host, $username, $password); $this->query("SET NAMES 'utf8'", $this->link); //echo mysql_errno($this->link) . ": " . mysql_error($link). "n"; //var_dump($this->link); return $this->link;}private function __clone(){}public static function get_class_nmdb($host, $username, $password){ //$connector = new nmdb($host, $username, $password); //return $connector; if( FALSE == (self::$_instance instanceof self) ) { self::$_instance = new self($host, $username, $password); } return self::$_instance;}// 串連資料表public function select_db($database){ $this->result = mysql_select_db($database); return $this->result;}// 執行SQL語句public function query($query){ return $this->result = mysql_query($query, $this->link);}// 將結果集儲存為數組public function fetch_array($fetch_array){ return $this->result = mysql_fetch_array($fetch_array, MYSQL_ASSOC);}// 獲得記錄數目public function num_rows($query){ return $this->result = mysql_num_rows($query);}// 關閉資料庫連接public function close(){ return $this->result = mysql_close($this->link);}
}
?>
PHP-FPM 機制是每個請求完畢後釋放所有資源,包括資料庫執行個體。
所以PHP-FPM下每個請求都會執行個體化一次資料庫執行個體。A使用者的請求和B使用者的請求使用的是不同的資料庫執行個體。