php设计模式——单例模式
单例模式概念
单例模式的特点
- 一个类在整个应用中只有一个实例
- 类必须自行创建这个实例
- 必须自行向整个系统提供这个实例
php中使用单例模式的原因
- <?php
- class MysqlConn
- {
- // MYSQL数据库连接信息
- const MYSQLHOSTNAME = "127.0.0.1";
- const MYSQLUSERNAME = "root";
- const MYSQLPASSWORD = "***";
- const MYSQLDBNAME = "test";
- const MYSQLCHARSET = "utf8";
- /**
- * Description:mysql数据库连接函数
- * Return value:连接成功返回数据库连接句柄;连接失败返回错误消息
- */
- public function MysqlConnect()
- {
- $db = new mysqli(self::MYSQLHOSTNAME, self::MYSQLUSERNAEM, self::MYSQLPASSWORD, self::MYSQLDBNAME); // 连接数据库
- $db->set_charset(self::MYSQLCHARSET);
- if (mysqli_connect_errno())
- {
- throw new CircleMysqlException("服务器系统故障", 1001);
- }
- else
- {
- return $db;
- }
- }
- }
缺陷:
改进:
每次应该直接返回当前应用中已经打开的数据库连接句柄
- //单例模式返回数据库连接句柄
- $db = MysqlConn::SingleMysqlConnect();
php单例模式的实现
- <?php
- class Singleton
- {
- /**
- * Description:(1)静态变量,保存全局实例,跟类绑定,跟对象无关
- * (2)私有属性,为了避免类外直接调用 类名::$instance,防止为空
- */
- private static $instance;
- /**
- * Description:数据库连接句柄
- */
- private $db;
- /**
- * Description:私有化构造函数,防止外界实例化对象
- */
- private static function __construct()
- {
- }
- /**
- * Description:私有化克隆函数,防止外界克隆对象
- */
- private function __clone()
- {
- }
- /**
- * Description:静态方法,单例访问统一入口
- * @return Singleton:返回应用中的唯一对象实例
- */
- public static function GetInstance()
- {
- if (!(self::$instance instanceof self))
- {
- self::$instance = new self();
- }
- return self::$instance;
- }
- /**
- * Description:获取数据库的私有方法的连接句柄
- */
- public function GetDbConnect()
- {
- return $this->db;
- }
- }
- 需要一个保存类的唯一实例的静态成员变量(通常$instance为私有变量)
- 构造函数和克隆函数必须声明为私有的,为了防止外部程序new类从而失去单例模式意义
- 必须提供一个访问这个实例的公共静态方法,从而返回唯一实例的一个引用
php设计模式——单例模式的更多相关文章
- 设计模式 单例模式(Singleton) [ 转载2 ]
设计模式 单例模式(Singleton) [ 转载2 ] @author java_my_life 单例模式的结构 单例模式的特点: 单例类只能有一个实例. 单例类必须自己创建自己的唯一实例. 单例类 ...
- 设计模式 单例模式(Singleton) [ 转载 ]
设计模式 单例模式(Singleton) [ 转载 ] 转载请注明出处:http://cantellow.iteye.com/blog/838473 前言 懒汉:调用时才创建对象 饿汉:类初始化时就创 ...
- c#设计模式-单例模式(面试题)
c#设计模式-单例模式 单例模式三种写法: 第一种最简单,但没有考虑线程安全,在多线程时可能会出问题, public class Singleton { private static Singleto ...
- java设计模式单例模式 ----懒汉式与饿汉式的区别
常用的五种单例模式实现方式 ——主要: 1.饿汉式(线程安全,调用率高,但是,不能延迟加载.) 2.懒汉式(线程安全,调用效率不高,可以延时加载.) ——其他: 1.双重检测锁式(由于JVM底层内部模 ...
- 最简单的设计模式——单例模式的演进和推荐写法(Java 版)
前言 如下是之前总结的 C++ 版的:软件开发常用设计模式—单例模式总结(c++版),对比发现 Java 实现的单例模式和 C++ 的在线程安全上还是有些区别的. 概念不多说,没意思,我自己总结就是: ...
- ES6教程-字符串,函数的参数,了解函数的arguments对象,js面向对象,设计模式-单例模式,解构赋值
前言 主要讲解了ES6对字符串的拓展,包括includes,startsWith和endsWith,另外增加了字符串模板. Start includes()是否包含 startsWith()以什么开头 ...
- Java设计模式の单例模式
-------------------------------------------------- 目录 1.定义 2.常见的集中单例实现 a.饿汉式,线程安全 但效率比较低 b.单例模式的实现:饱 ...
- java设计模式——单例模式(一)
一. 定义与类型 定义:保证一个类仅有一个实例,并提供一个全局访问点 类型:创建型 二. 适用场景 想确保任何情况下都绝对只用一个实例 三. 优缺点 优点: 在内存里只有一个实例,减少了内存开销 可以 ...
- php实现设计模式————单例模式
php实现设计模式————单例模式 什么是单例模式 为什么要使用单例模式 php中有哪些方式实现新建一个对象实例 如何阻止这种实例化实现理想的单例模式 代码实现 什么是单例模式 为什么要使用单例模式 ...
- JAVA设计模式-单例模式(Singleton)线程安全与效率
一,前言 单例模式详细大家都已经非常熟悉了,在文章单例模式的八种写法比较中,对单例模式的概念以及使用场景都做了很不错的说明.请在阅读本文之前,阅读一下这篇文章,因为本文就是按照这篇文章中的八种单例模式 ...
随机推荐
- 【C++学习之路】派生类的构造函数(一)
一.简单派生类的构造函数 1.所谓简单派生类,就是指派生类中不包含基类的内嵌对象的派生类. 2.一般来说,这样的派生类的构造函数的形式是: student( int i, string nam, in ...
- Hibernate对象的状态和映射
一. Hibernate对象的状态 实体对象的三种状态: 1) 暂态(瞬时态)(Transient)---实体在内存中的自由存在,它与数据库的记录无关. po在DB中无记录(无副本),po和sessi ...
- twsited(4)--不同模块用redis共享以及用web发送数据到tcpserver
上一章开头我们说,要连接之前flask系列文章中的用户,结果篇幅不够,没有实现. 今天我们把它实现一下.话说,不同模块之间,该如何联系在一起,通常都是mysql.redis.rabbitmq还有RPC ...
- 清除oracl中有主外键关联的表中的部分数据。
1.禁用主外键BEGINfor c in (select 'ALTER TABLE '||TABLE_NAME||' DISABLE CONSTRAINT '||constraint_name||' ...
- SVM详解
SVM入门(一)至(三)Refresh 按:之前的文章重新汇编一下,修改了一些错误和不当的说法,一起复习,然后继续SVM之旅. (一)SVM的简介 支持向量机(Support Vector Machi ...
- 转:Twitter.com在用哪些Javascript框架?
原文来自于:http://blog.jobbole.com/63964/ 我一直在研究twitter.com使用的一些UI框架.下面是这些框架的清单(大部分是Javascript框架).如果你发现有些 ...
- Altium Designer 蛇行等长布线
一. 设置需要等长的网络组 点击主菜单 Design --> Classes,在弹出的窗口中单击 Net Classes,并右键,点 Add Class 会增加一个 New Class,在该网络 ...
- 理解ATL中的一些汇编代码(通过Thunk技术来调用类成员函数)
我们知道ATL(活动模板库)是一套很小巧高效的COM开发库,它本身的核心文件其实没几个,COM相关的(主要是atlbase.h, atlcom.h),另外还有一个窗口相关的(atlwin.h), 所以 ...
- 利用ftrace跟踪内核static tracepoint——实例writeback event
摘要:和很多linux内核子系统一样,static tracepoint有很多层次,其中某个层次都展示给不同层次的开发者来满足他们的不同需求.关于linux tracepoint的详细信息,我们可以在 ...
- Invalid file system control data detected
今天在做mkdir操作时报错:Invalid file system control data detected.检查用户和权限没问题,再检查磁盘空间也没问题.最后在网上找到如下信息: [proble ...