单例模式的解释
百度百科:
单例模式,是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例的特殊类。通过单例模式可以保证系统中,应用该模式的类一个类只有一个实例。即一个类只有一个对象实例
单例模式又称为职责模式,它用来在程序中创建一个单一功能的访问点,通俗地说就是实例化出来的对象是唯一的。
所有的单例模式至少拥有以下三种公共元素:
1. 它们必须拥有一个构造函数,并且必须被标记为private
2. 它们拥有一个保存类的实例的静态成员变量
3. 它们拥有一个访问这个实例的公共的静态方法
单例类不能再其它类中直接实例化,只能被其自身实例化。它不会创建实例副本,而是会向单例类内部存储的实例返回一个引用。
通俗易懂的单例模式
防止外界直接去new类
class MySQL
{
// $link 为空, 证明没有连接数据库
// $link 非空, 证明你已经连接了数据库
private static $link;
//类一运行自动运行
protected function __construct()
{
//写入要运行的方法,减少了new(内存的消耗)
echo '数据库连接成功了... <br>';
}
static public function getConnect()
{
//为空就去实例化一次
if(empty(self::$link)){
self::$link = new self;
}
//不为空直接返回
return self::$link;
}
}
保证只连接一次
运行:MySQL::getContent();
数据库实际应用
DB类
class DB
{
//保存DB对象 静态属性值
private static $obj = null;
//保存PDO数据库操作对象
private $link = null;
//保存操作的数据表
private $table = null;
//数据库 初始化操作
private function __construct($table)
{
//单例 封装构造,不能实例化
//链接数据库相关设置
$this->connect();
//设置操作的数据表
$this->setTable($table);
}
//设置操作的表名(静态方法)
public static function table($table)
{
if (self::$obj === null) {
// 实例化PDO对象
self::$obj = new self($table);
}
//返回PDO对象
return self::$obj;
}
//设置操作的数据表
protected function setTable($table)
{
$this->table = $table;
}
//链接数据库的设置
protected function connect()
{
// 实例化PDO的对象
$this->link = new PDO(DSN, USER, PASS);
// 设置SQL错误处理方式
$this->link->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// 设置字符集
$this->link->query('set names utf8');
// 设置结果集为数组方式
$this->link->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
}
}
config配置文件
define('DSN', 'mysql:host=主机地址;dbname=数据库名字;charset=utf8');
define('USER', '用户名');
define('PASS', '密码');