<p style="margin-left: 30px">一直以来都是在写项目却从来没有仔细分析过什么是单例模式,单例模式分为几种,单例模式有什么特点。今天随便记录一个随笔,全当是复习复习做个笔记。
<p style="margin-left: 30px">单例模式要确保某个类只有一个实例,而且自动实例化并向整个系统提供实例。单例模式分为3种:饿汉单例模式、懒汉单例模式、登记式单例模式。
<p style="margin-left: 30px">单例模式有3个特点:
- 只有一个实例
- 必须自行创建这个实例
- 必须给其他对象提供这个实例
数据库连接,这种耗费资源的操作。类的结构分为3私1公/4私1公。下面就编写一个简单的单例模式:
PHP
= 1
=
方法
__construct( '我是私有构造方法
' 方法 方法 ((self:: self:: = self:: = db:: ( = db:: ();
' 方法 方法 ((self:: self:: = self:: = db:: ( = db:: ();
PHP设计模式-单例模式" src="/res/2019/03-02/08/c1856ba11afd6c434d1742970152e90d.png" alt="MysqL连接单例模式">
<p style="margin-left: 30px">可以看到两次执行的句柄都一样是同一个实例。接下来把这个单例完善一下变成一个数据库连接的单例模式:
<div class="cnblogs_code">
PHP
= 'host' => 'localhost', 'username' => 'root', 'password' => 'root', 'databases' => '', 'port' => 3306, 'conding' => 'utf8'
=
方法
数据库配置
__construct(
(() && (
->config = (->config, 数据库连接
->link = MysqLi_connect(->config['host'],->config['username'],->config['password'],->config['databases'],->config['port'
输出连接错误
->
(->config['databases' = ->config['conding' ->query("SET NAMES '{}'"
->
方法
方法
数据库配置
getInstance(
((self:: 自动实例化,给构建方法传$config配置
self:: = self(
self::
sql
sql语句
query( ->result = MysqLi_query(->link, ->
数据库
数据库名称
select_db( ->result = MysqLi_select_db(->link, = ->config['conding' ->query("SET NAMES '{}'" ->
查询一条或多条数据
sql