php tp5单例模式

class Database{

	//4个私,一个公
	//用于保存当前实例化后的对象
	private static $instance = null;
	private $db = null;
	//构造方法声明为私有方法,禁止外部使用
	private function __construct($config=array()){
		$dsn = sprintf('mysql:host=%s;dbname=%s',$config['db_host'],$config['db_name']);
		$this->db = new PDO($dsn,$config['db_user'],$config['db_pass']);
	}
	//获取当前容器的实例(单例)
	public static function getinstance($config=array()){
		if(self::$instance == null){
			self::$instance = new self($config)
		}
		return self::$instance;
	}
	//获取数据库句柄
	public function db(){
		return $this->db;
	}
	//声明私有方法,禁止克隆
	private function __clone(){}
	//禁止重建对象
	private function __wakeup(){}
}

$config = array(
	'db_name' => 'tp_shop',
	'db_host' => 'localhost',
	'db_user' => 'root',
	'db_pass' => ''
)
$db1 = Database::getinstance($config);
var_dump($db1);

【意图】
保证一个类仅有一个实例,并且提供一个访问它的全局访问点
单例模式有三个特点:
1、一个类只有一个实例
2、它必须自行创建这个实例
3、必须自行向整个系统提供这个实例

【单例模式结构图】
在这里插入图片描述
【单例模式主要角色】
Singleton 定义一个Instance操作,允许客户访问它的唯一实例。Instance是一个类方法。负责创建它的唯一的实例。

【单例模式的优点】
1、对唯一实例的受控访问
2、缩小命名空间 单例模式是对全局变量的一种改进。它避免了那些存储唯一实例的全局变量污染命名空间
3、允许对操作和表示的精华 单例类可以有子类。而且用这个扩展类的实例来配置一个应用是很容易的。你可以用你所需要的类的实例在运行时刻配置应用。
4、允许可变数目的实例(多例模式)
5、比类操作更灵活

【单例模式适用场景】
1、当类只能有一个实例而且客户可以从一个众所周知的访问点访问它时
2、当这个唯一实例应该是通过子类化可扩展的。并且用户应该无需更改代码就能使用一个扩展的实例时。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值