`
moqiang02
  • 浏览: 524072 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
文章分类
社区版块
存档分类
最新评论

PHP设计模式之:单例模式

 
阅读更多

前些日子开始着真正的去了解下设计模式,开始么,简单地从单例模式开始,当然网上看了一些资料,单例模式比较好理解,看看介绍,然后看看代码基本也就能够理解了,设计模式这些的花点心思基本的是能够理解的,当然要想很好的运用到项目上也是需要一定的实践,不能只是知道了解,或者说的是很厉害很懂的,一到要实际操作就不行了,废话就不多说了,PHP战线上的同志们都加油吧;

单例模式职责模式):

简单的说,一个对象(在学习设计模式之前,需要比较了解面向对象思想)只负责一个特定的任务;

单例类:

1、构造函数需要标记为private(访问控制:防止外部代码使用new操作符创建对象),单例类不能在其他类中实例化,只能被其自身实例化;

2、拥有一个保存类的实例的静态成员变量

3、拥有一个访问这个实例的公共的静态方法(常用getInstance()方法进行实例化单例类,通过instanceof操作符可以检测到类是否已经被实例化)

另外,需要创建__clone()方法防止对象被复制(克隆)

为什么要使用PHP单例模式?

1php的应用主要在于数据库应用,<wbr><wbr></wbr></wbr>所以一个应用中会存在大量的数据库操作,<wbr><wbr></wbr></wbr>使用单例模式,<wbr><wbr></wbr></wbr>则可以避免大量的new<wbr><wbr></wbr></wbr>操作消耗的资源。

2如果系统中需要有一个类来全局控制某些配置信息,<wbr><wbr></wbr></wbr>那么使用单例模式可以很方便的实现.<wbr><wbr></wbr></wbr>这个可以参看ZFFrontController部分。

3在一次页面请求中,<wbr><wbr></wbr></wbr>便于进行调试,<wbr><wbr></wbr></wbr>因为所有的代码(例如数据库操作类db)都集中在一个类中,<wbr><wbr></wbr></wbr>我们可以在类中设置钩子,<wbr><wbr></wbr></wbr>输出日志,从而避免到处var_dump,<wbr><wbr>echo</wbr></wbr>

代码实现:

<?php
/1**
* 设计模式之单例模式
* $_instance必须声明为静态的私有变量
* 构造函数和析构函数必须声明为私有,防止外部程序new
* 类从而失去单例模式的意义
* getInstance()方法必须设置为公有的,必须调用此方法
* 以返回实例的一个引用
* ::操作符只能访问静态变量和静态函数
* new对象都会消耗内存
* 使用场景:最常用的地方是数据库连接。 
* 使用单例模式生成一个对象后,
* 该对象可以被其它众多对象所使用。 
*/
class Danli {
 
	//保存类实例的静态成员变量
	private static $_instance;
	 
	//private标记的构造方法
	private function __construct(){
		echo 'This is a Constructed method;';
	}
	 
	//创建__clone方法防止对象被复制克隆
	public function __clone(){
		trigger_error('Clone is not allow!',E_USER_ERROR);
	}
	 
	//单例方法,用于访问实例的公共的静态方法
	public static function getInstance(){
		if(!(self::$_instance instanceof self)){
			self::$_instance = new self;
		}
		return self::$_instance;
	}
	 
	public function test(){
		echo '调用方法成功';
	}
 
}
 
//用new实例化private标记构造函数的类会报错
//$danli = new Danli();
 
//正确方法,用双冒号::操作符访问静态方法获取实例
$danli = Danli::getInstance();
$danli->test();
 
//复制(克隆)对象将导致一个E_USER_ERROR
$danli_clone = clone $danli; 


分享到:
评论

相关推荐

    设计模式—— 七 :单例模式

    单例模式的实现饿汉式懒汉式线程安全的懒汉式登记式单例模式的优缺点单例模式的优点单例模式的缺点 单例模式是23个模式中比较简单的模式,应用也非常广泛 什么是单例模式? 单例模式的定义: Ensure a class ...

    设计模式之PHP项目应用——单例模式设计Memcache和Redis操作类源码

    1)程序功能:单例模式设计Memcache和Redis操作类,采用PHP编写。...3)原创作品,出自"CleverCode的博客",分类为《设计模式之PHP项目应用》。 4)欢迎大家关注博客更多精彩的内容:http://blog.csdn.net/CleverCode。

    PHP设计模式之单例模式定义与用法分析

    本文实例分析了PHP设计模式之单例模式。分享给大家供大家参考,具体如下: 单例模式(Singleton Pattern 单件模式或单元素模式),是常见的一种设计模式,它有三个特点 1.只能有一个实例 2.必须自行创建这个实例...

    php设计模式之单例模式_.docx

    php设计模式之单例模式_.docx

    php设计模式之单例模式代码_.docx

    php设计模式之单例模式代码_.docx

    php设计模式之单例模式实例分析

    本文实例讲述了php设计模式之单例模式。分享给大家供大家参考。具体分析如下: 单例模式(职责模式): 简单的说,一个对象(在学习设计模式之前,需要比较了解面向对象思想)只负责一个特定的任务; 单例类: 1、...

    php设计模式之单例模式实例分析_.docx

    php设计模式之单例模式实例分析_.docx

    PHP设计模式之单例模式__1.docx

    PHP设计模式之单例模式__1.docx

    php设计模式 Singleton(单例模式)

    php /** * 单例模式 * * 保证一个类仅有一个实例,并提供一个访问它的全局访问点 * */ class Singleton { static private $_instance = null; private function __construct() { } static public function ...

    PHP5设计模式-单例模式

    最简单的PHP设计模式,单例模式。大家可以参考下。

    PHP单例模式访问数据库

    PHP单例模式访问数据库 php 单例模式 数据库 设计模式

    PHP单例设计模式,连接多数据库源码

    PHP单例设计模式,连接多数据库源码 单例模式的三个特点 1: 一个类只能有一个实例 2: 它保修自行创建这个实例 3: 必须自行向整个系统提供这个实例. 单例模式中主要的角色 Singleton定义一个Instance操作,允许客户...

    php单例模式实例

    如果说php是一门面向对象编程的话,那么设计模式就是它的灵魂,其中单例模式就是设计模式的重中之重了,分享鄙人一直用的单例模式。

    PHP中常用的三种设计模式详解【单例模式、工厂模式、观察者模式】

    本文实例讲述了PHP中常用的三种设计模式。分享给大家供大家参考,具体如下: PHP中常用的三种设计模式:单例模式、工厂模式、观察者模式 1.单例模式 为何要使用PHP单例模式? 多数人都是从单例模式的字面上的意思...

    PHP设计模式之单例模式入门与应用详解

    本文实例讲述了PHP设计模式之单例模式入门与应用。分享给大家供大家参考,具体如下: 单例模式,是一种常用的软件设计模式,在它的核心结构中只包含一个被称为单例的特殊类。通过单例模式可以保证系统中一个类只有一...

    php实现设计模式中的单例模式详解

    2、缩小命名空间 单例模式是对全局变量的一种改进。它避免了那些存储唯一实例的全局变量污染命名空间 3、允许对操作和表示的精华 单例类可以有子类。而且用这个扩展类的实例来配置一个应用是很容易的。你可以用你所...

    PHP设计模式之单例模式原理与实现方法分析

    本文实例讲述了PHP设计模式之单例模式原理与实现方法。分享给大家供大家参考,具体如下: 一、什么是单例模式 作为对象的创建模式,单例模式确保某一个类只有一个实例,并且对外提供这个全局实例的访问入口。它不会...

    学习php设计模式 php实现单例模式(singleton)

    主要介绍了php设计模式中的单例模式,使用php实现单例模式,感兴趣的小伙伴们可以参考一下

    PHP设计模式之工厂模式与单例模式

    本文实例讲述了PHP设计模式之工厂模式与单例模式实现方法。分享给大家供大家参考,具体如下: 设计模式简单说应对某类问题而设计的解决方式 工厂模式:应对需求创建相应的对象 class factory{ function __...

    php基于单例模式编写PDO类

    引入了单例模式来保证在全局调用中不会重复实例化这个类,降低系统资源的浪费,一个对象(在学习设计模式之前,需要比较了解面向对象思想)只负责一个特定的任务。 php的应用主要在于数据库应用, 所以一个应用中会...

Global site tag (gtag.js) - Google Analytics