單列模式保證系統(tǒng)中一個(gè)類只有一個(gè)實(shí)例。即一個(gè)類只有一個(gè)對(duì)象實(shí)例。
特點(diǎn):
1.一個(gè)類只能有一個(gè)對(duì)象;
2.必須是自行創(chuàng)建這個(gè)類的對(duì)象;
3.要想整個(gè)系統(tǒng)提供這一個(gè)對(duì)象;
<?php
class single{
private static $instance;
public function __construct(){
echo "自己初始化<br/>";
}
//防止克隆對(duì)象
public function __clone(){}
/** 實(shí)例化self */
public static function getInstance(){
if(!self::$instance instanceof self){
self::$instance = new self();
}
return self::$instance;
}
/* 方法 */
public function getName(){
return "name";
}
}
$obj = single::getInstance();
echo $obj->getName();
?>
單列模式簡(jiǎn)單應(yīng)用:
class mysqlConnect{
private static $instance;
private $db;
public function __construct($config){
try{
$this->db = new \PDO($config['host'], $config['user'], $config['password']);
$this->db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$this->db->exec('set names utf8');
}catch(PDOException $e){
var_dump($e->getMessage());
}
}
public static function getInstance($config){
if(!self::$instance instanceof self){
self::$instance = new self($config);
}
return self::$instance;
}
public function query(){
$stmt = $this->db->query('select 1+1 as sum');
//var_dump($stmt->fetchAll(PDO::FETCH_ASSOC));
//$res = $stmt->fetchAll(PDO::FETCH_ASSOC);
$res = $stmt->fetch(PDO::FETCH_ASSOC);
var_dump($res['sum']);
}
}
$config = [
'host' => 'mysql:host=localhost;dbname=demo',
'user' => 'root',
'password' => '123456'
];
$obj = mysqlConnect::getInstance($config);
$obj->query();