abstract:<?php // 寫一個數(shù)據(jù)庫連接的單例模式案例,確保只會產(chǎn)生一個數(shù)據(jù)庫連接對象 class Db { private $dsn = 'mysql:host=127.0.0.1;dbname=php_mysql;charset=utf8'; private $user = 'root
<?php // 寫一個數(shù)據(jù)庫連接的單例模式案例,確保只會產(chǎn)生一個數(shù)據(jù)庫連接對象 class Db { private $dsn = 'mysql:host=127.0.0.1;dbname=php_mysql;charset=utf8'; private $user = 'root'; private $pass = '123456'; // 類的實例化兩種方式,一:new 二:clone private function __construct(){} private function __clone(){} private static $single = null; // 創(chuàng)建一個外部接口,創(chuàng)建并返回當前類的實例 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ù)庫連接成功'); }catch(PDOException $e){ print('數(shù)據(jù)庫連接失敗'); 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 ? '屬于同一個對象':'不屬于同一個對象'; echo '<br>'; $sin1->getConnect();
1、我不知道這個小demo算不算是數(shù)據(jù)庫連接的單例模式,我百度了然后再根據(jù)自己理解寫的。
2、static::$single = new static() 這個寫法我不太理解,這就創(chuàng)建了當前類的一個實例了?
Correcting teacher:天蓬老師Correction time:2019-04-09 11:39:40
Teacher's summary:單例模式, 屬于創(chuàng)建型的設計模式, php的設計模式,與Java幾乎是完全一樣的.
static關鍵字, 不僅僅是用來聲明靜態(tài)成員, 還可以用來綁定繼承上下文環(huán)境中的類,這個要好好理解一下