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面向对象 – 单例模式的更多相关文章

  1. python面向对象, 单例模式

    目录 单利模式 实现单利模式的方法 使用模块 使用__new__ 为了使类只能出现一个实例,我们可以使用 new 来控制实例的创建过程,代码如下: 使用装饰器 使用 metaclass 补充:元类(m ...

  2. [Java笔记]面向对象-单例模式

    单例模式 目标 使JVM中最多只有一个该类的实例,以节省内存.缺点:只能建一个该类的实例. 实现 具体实现思路: 1构造方法私有化//故在外面不能new很多次 2对外提供一个公开的静态的类方法,获取类 ...

  3. 面向对象——单例模式,五种方式

    单例模式:多次实例化的结果指向同一个实例 实现方式 一.使用类方法(调用创新对象,函数返回原定对象) import settings class Mysql: __instance = None de ...

  4. PHP面向对象单例模式(懒汉式)

    知识点: 一.三私一公: ①.私有静态属性,又来储存生成的唯一对象 ②.私有构造函数 ③.私有克隆函数,防止克隆——clone ④.公共静态方法,用来访问静态属性储存的对象,如果没有对象,则生成此单例 ...

  5. day26 面向对象 单例模式总结

    如果是在python2中,就需要手动继承object, 基于__new__方法 基于__new__方法 class Foo(object): def __new__(cls,*args,**kwarg ...

  6. Python单例模式

    1.单例模式介绍 单例模式,也叫单子模式,是一种常用的软件设计模式.在应用这个模式时, 单例对象的类必须保证只有一个实例存在.许多时候整个系统只需要拥有一个 全局对象,这样有利于我们协调系统整体的行为 ...

  7. 【Java】单例模式(Singleton)

    重新搞一波 复习巩固 简单记录 慕课网 Java工程师 文章目录 单例概述 设计模式 单例模式(Singleton) 参考资料 单例概述 Singleton Pattern 单例模式是Java中最简单 ...

  8. 《JAVA学习笔记(1---13-4)》

    [1]问题: 1.什么叫做面向过程? 2.什么叫做面向对象? 解答: 1: 所谓的面向过程就是我们是一个执行者,我们要开发一个项目,这个项目要求要实现很多功能,作为执行者的我们就需要 去一个一个的找这 ...

  9. php常见面试题

    1.如何取得来访者的IP地址? $_SERVER['RRMOTE_ADDR']; $_SERVER['CLIENT_IP']; $_SERVER['HTTP_X_FORWARED_FOR']; 2.$ ...

随机推荐

  1. LINQ to SQL 基础

    取得数据库Gateway 要操作数据库,我们首先要获得一个DataContext对象,这个对象相当于一个数据 库的Gateway,所有的操作都是通过它进行的.这个对象的名字是“Linq to SQL ...

  2. 静态html传参数

    记下来备忘 a.html <html> <head> <body> <a href="c.html?test=大师大师" target=& ...

  3. struts2与spring集成时,关于class属性及成员bean自动注入的问题

    http://blog.csdn.net/sun_zhicheng/article/details/24232129

  4. nodejs概论(实操篇)

    什么是模块? 模块分为原生模块(node.jsAPI提供的原生模块,在启动时已经被加载)和 文件模块(动态加载模块,主要由原生模块module来实现和完成.通过调 用node.js的require方法 ...

  5. Hadoop 中 IPC 的源码分析

    最近开始看 Hadoop 的一些源码,展开hadoop的源码包,各个组件分得比较清楚,于是开始看一下 IPC 的一些源码. IPC模块,也就是进程间通信模块,如果是在不同的机器上,那就可以理解为 RP ...

  6. (转载)用css来实现十字的布局

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  7. element的height与width

    关于一个element所有的高度宽度 ele.style.width,ele.style.height:操纵style样式.+"px" offsetWidth.offsetHeig ...

  8. Linux命令——创建删除文件

    创建文件夹 mkdir filename 进入目录文件 cd filename 返回上一级目录 cd ..返回多级目录   cd ../../.. (../表示一级) 创建文件 touch filen ...

  9. CSU 1337(费马大定理)

      CSU 1337 Time Limit:1000MS     Memory Limit:131072KB     64bit IO Format:%lld & %llu   Descrip ...

  10. SCALA中类的继承

    慢慢的,回想起以前学习JAVA和C#当中的的类的特性了. 感觉大同小异吧... package com.hengheng.scala class OOPInScala { } class Studen ...