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. Deep Learning学习随记(一)稀疏自编码器

    最近开始看Deep Learning,随手记点,方便以后查看. 主要参考资料是Stanford 教授 Andrew Ng 的 Deep Learning 教程讲义:http://deeplearnin ...

  2. iOS之多线程开发NSThread、NSOperation、GCD

    原文出处: 容芳志的博客   欢迎分享原创到伯乐头条 简介iOS有三种多线程编程的技术,分别是:(一)NSThread(二)Cocoa NSOperation(三)GCD(全称:Grand Centr ...

  3. iOS9 中的一些适配问题

    1.URL scheme白名单:在info文件中加入LSApplicationQueriesSchemes(Array),添加需要的scheme,如微信:weixin.wechat 支付宝:alipa ...

  4. QT实现单个EXE文件

    有时候发布用Qt写的软件是件令人烦恼的事情,明明发布的只是一个简单功能的小软件,非得再附上一堆超大的动态链接库,实在让人觉得汗颜 . 在可执行文件单文件化方面,有多种方法.常用的是编译并使用静态 Qt ...

  5. C++中public、protected、private

    C++中public.protected.private 第一:private, public, protected 访问标号的访问范围. private:只能由  1.该类中的函数. 2.其友元函数 ...

  6. Java学习----变量是什么

    1.变量必须拥有的类型 2.变量必须拥有的名字 变量:具备名字和类型的可以存放类型匹配的数据的量 public class Student { public static void main(Stri ...

  7. Dede 查询附加表

    <!--使用dede:arclist取出信息 dede_archives 表 $sql="Select 字段 from dede_archivies",但是在默认情况下 de ...

  8. 外卖的撕‘哔’大战 CSU 1559

                                                      CSU 1559 Time Limit:1000MS     Memory Limit:131072 ...

  9. Linux 下安装Python框架django建立与mysql的连接

    0.基本环境说明: a. Ubuntu 14.04 64bit b. python 2.7.6 c. django 1.8 d. django-registration e. django-widge ...

  10. javascript language

    function class(function, this, prototype) closure与function expression没有任何关系. closure必然与function联系在一起 ...