abstract:<?php // 写一个数据库连接的单例模式案例,确保只会产生一个数据库连接对象 class Db { private $dsn = 'mysql:host=127.0.0.1;dbname=php_mysql;charset=utf8'; private $user = 'root
<?php // 写一个数据库连接的单例模式案例,确保只会产生一个数据库连接对象 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; // 创建一个外部接口,创建并返回当前类的实例 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('数据库连接成功'); }catch(PDOException $e){ print('数据库连接失败'); 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算不算是数据库连接的单例模式,我百度了然后再根据自己理解写的。
2、static::$single = new static() 这个写法我不太理解,这就创建了当前类的一个实例了?
Correcting teacher:天蓬老师Correction time:2019-04-09 11:39:40
Teacher's summary:单例模式, 属于创建型的设计模式, php的设计模式,与Java几乎是完全一样的.
static关键字, 不仅仅是用来声明静态成员, 还可以用来绑定继承上下文环境中的类,这个要好好理解一下