Php面向对象 – 单例模式
Php面向对象 – 单例模式
保证类仅仅有一个实例
1. 怎样能够解决一个类能够被无限地实例化?
New,就能实例化一次,怎么去限制,用户不能无限次地new?
将构造方法私有化。全部外部的new都操作失败
class MySQLDB
{
private function __construct()
{
}
}
2. 一旦构造方法私有化,意味着类不能再类外实例化。但能够在类内实例化。
添加一个公共的静态方法,通过类来调用该方法,在方法内能够运行new操作。
class MySQLDB
{
private function __construct()
{
}
public static function getInstance()
{
return new MySQLDB;
}
}
$o = MySQLDB::getInstance();
此时,用户须要该类的对象,方法内的代码就会运行,因此,我们能够通过完好方法内的逻辑,限制用户得到对象的操作。
3. 在上面的方法内,使用这种逻辑:每次运行时做推断,推断该类是否已经实例化对象,假设实例化了,则直接返回这个实例化好的对象。假设没有实例化,则实例化一个新的,然后返回。
怎样推断?
在这个对象被实例化出来时,保存起来。
样例:
class MySQLDB
{
private static $instance;
private function __construct()
{
}
public static function getInstance()
{
if(!self::$instance instanceof self)
{
self::$instance= new self;
}
return self::$instance;
}
}
4. 克隆也能够得到新对象,因此须要限制克隆。
私有化 __clone()方法
class MySQLDB
{
private static $instance;
private function __construct()
{
}
private function __clone()
{
}
public static function getInstance()
{
if(!self::$instance instanceof self)
{
self::$instance= new self;
}
return self::$instance;
}
}
Php面向对象 – 单例模式的更多相关文章
- python面向对象, 单例模式
目录 单利模式 实现单利模式的方法 使用模块 使用__new__ 为了使类只能出现一个实例,我们可以使用 new 来控制实例的创建过程,代码如下: 使用装饰器 使用 metaclass 补充:元类(m ...
- [Java笔记]面向对象-单例模式
单例模式 目标 使JVM中最多只有一个该类的实例,以节省内存.缺点:只能建一个该类的实例. 实现 具体实现思路: 1构造方法私有化//故在外面不能new很多次 2对外提供一个公开的静态的类方法,获取类 ...
- 面向对象——单例模式,五种方式
单例模式:多次实例化的结果指向同一个实例 实现方式 一.使用类方法(调用创新对象,函数返回原定对象) import settings class Mysql: __instance = None de ...
- PHP面向对象单例模式(懒汉式)
知识点: 一.三私一公: ①.私有静态属性,又来储存生成的唯一对象 ②.私有构造函数 ③.私有克隆函数,防止克隆——clone ④.公共静态方法,用来访问静态属性储存的对象,如果没有对象,则生成此单例 ...
- day26 面向对象 单例模式总结
如果是在python2中,就需要手动继承object, 基于__new__方法 基于__new__方法 class Foo(object): def __new__(cls,*args,**kwarg ...
- Python单例模式
1.单例模式介绍 单例模式,也叫单子模式,是一种常用的软件设计模式.在应用这个模式时, 单例对象的类必须保证只有一个实例存在.许多时候整个系统只需要拥有一个 全局对象,这样有利于我们协调系统整体的行为 ...
- 【Java】单例模式(Singleton)
重新搞一波 复习巩固 简单记录 慕课网 Java工程师 文章目录 单例概述 设计模式 单例模式(Singleton) 参考资料 单例概述 Singleton Pattern 单例模式是Java中最简单 ...
- 《JAVA学习笔记(1---13-4)》
[1]问题: 1.什么叫做面向过程? 2.什么叫做面向对象? 解答: 1: 所谓的面向过程就是我们是一个执行者,我们要开发一个项目,这个项目要求要实现很多功能,作为执行者的我们就需要 去一个一个的找这 ...
- php常见面试题
1.如何取得来访者的IP地址? $_SERVER['RRMOTE_ADDR']; $_SERVER['CLIENT_IP']; $_SERVER['HTTP_X_FORWARED_FOR']; 2.$ ...
随机推荐
- ICOMOON!强悍的WEB字体图标制造器/Web字体使用实例
IcoMoon!一个可以通过个性化设置来创建自定义图标(字体)的生成器!也可以将SVG图片,转换成web字体 IcoMoon是一项免费的服务,通过使用不同设置使我们能够创建自定义的ICON图或ICON ...
- iOS 格式化输出符号与类型转换
1.iOS 格式化输出符号 %@ 对象 %d, %i 整数 %u 无符号整形 %f 浮点(双字节) %x, %X 二进制整数 %o 八进制整数 %zi ...
- 如何修改UITableView每个cell的分隔线和左边的距离?
在ios7中,UITableViewCell左侧会有默认15像素的空白.这时候,设置setSeparatorInset:UIEdgeInsetsZero 能将空白去掉.但是在ios8中,设置setSe ...
- Ajax的工作流程简述
提到Ajax相信我们都不会陌生,不管你是前端开发还是后台数据处理的程序员,ajax的作用就像现在生活中的手机一样,无论是作用还是流程都差不多,这里我们要进行ajax操作后台数据并显示在页面上的话,首先 ...
- Qt之QCustomPlot绘图(一)配置和第一个例子
最近一个用Qt开发的项目需要绘制坐标曲线,我在老师的指点下使用了QCustomPlot这个插件,使用方法简单,功能还算不错. 可是在网上找了很多资料和博文都只是将官方提供的例子演示一遍,没有系统全面的 ...
- 【Usaco2008 Mar】土地购买
[题目描述] 农夫John准备扩大他的农场,他正在考虑N (1 <= N <= 50,000) 块长方形的土地. 每块土地的长宽满足(1 <= 宽 <= 1,000,000; ...
- 关闭iOS的自动更新
Safari打开网址https://oldcat.me/web/NOOTA9.mobileconfig,安装描述文件,就不会自动下载和提示更新最新的iOS了
- Java中抽象类和接口的用法和区别
一.抽象类 1.抽象类 包含一个抽象方法的类就是抽象类 2.抽象方法 声明而未被实现的方法,抽象方法必须使用abstract关键词字声明 public abstract class People { ...
- C语言:Message类
message.h #ifndef MESSAGE_H #define MESSAGE_H #define TRUE 1 #define FALSE 0 typedef struct { int se ...
- Solr In Action 笔记(2) 之 评分机制(相似性计算)
Solr In Action 笔记(2) 之评分机制(相似性计算) 1 简述 我们对搜索引擎进行查询时候,很少会有人进行翻页操作.这就要求我们对索引的内容提取具有高度的匹配性,这就搜索引擎文档的相似性 ...