abstrak:<?php // 寫(xiě)一個(gè)數(shù)據(jù)庫(kù)連接的單例模式案例,確保只會(huì)產(chǎn)生一個(gè)數(shù)據(jù)庫(kù)連接對(duì)象 class Db { private $dsn = 'mysql:host=127.0.0.1;dbname=php_mysql;charset=utf8'; private $user = 'root
<?php // 寫(xiě)一個(gè)數(shù)據(jù)庫(kù)連接的單例模式案例,確保只會(huì)產(chǎn)生一個(gè)數(shù)據(jù)庫(kù)連接對(duì)象 class Db { private $dsn = 'mysql:host=127.0.0.1;dbname=php_mysql;charset=utf8'; private $user = 'root'; private $pass = '123456'; // 類(lèi)的實(shí)例化兩種方式,一:new 二:clone private function __construct(){} private function __clone(){} private static $single = null; // 創(chuàng)建一個(gè)外部接口,創(chuàng)建并返回當(dāng)前類(lèi)的實(shí)例 public static function getPdo() { if(is_null(static::$single)){ static::$single = new static(); } return static::$single; } public function getConnect(){ try{ $pdo = new Pdo($this->dsn,$this->user,$this->pass); print_r('數(shù)據(jù)庫(kù)連接成功'); }catch(PDOException $e){ print('數(shù)據(jù)庫(kù)連接失敗'); print_r($e->getMessage()); } } } $sin1 = Db::getPdo(); $sin2 = Db::getPdo(); // $sin3 = new Single(); // var_dump($sin3); echo $sin1 instanceof Db? '是':'不是'; echo '<br>'; echo $sin2 instanceof Db? '是':'不是'; echo '<br>'; echo $sin1 === $sin2 ? '屬于同一個(gè)對(duì)象':'不屬于同一個(gè)對(duì)象'; echo '<br>'; $sin1->getConnect();
1、我不知道這個(gè)小demo算不算是數(shù)據(jù)庫(kù)連接的單例模式,我百度了然后再根據(jù)自己理解寫(xiě)的。
2、static::$single = new static() 這個(gè)寫(xiě)法我不太理解,這就創(chuàng)建了當(dāng)前類(lèi)的一個(gè)實(shí)例了?
Guru membetulkan:天蓬老師Masa pembetulan:2019-04-09 11:39:40
Rumusan guru:?jiǎn)卫J? 屬于創(chuàng)建型的設(shè)計(jì)模式, php的設(shè)計(jì)模式,與Java幾乎是完全一樣的.
static關(guān)鍵字, 不僅僅是用來(lái)聲明靜態(tài)成員, 還可以用來(lái)綁定繼承上下文環(huán)境中的類(lèi),這個(gè)要好好理解一下