AD

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

这篇文章主要介绍了php设计模式之单例模式,实例分析了单例模式的原理与相关使用技巧,具有一定参考借鉴价值,需要的朋友可以参考下

本文实例讲述了php设计模式之单例模式。分享给大家供大家参考。具体分析如下:

单例模式(职责模式):

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

单例类:

1、构造函数需要标记为private(访问控制:防止外部代码使用new操作符创建对象),单例类不能在其他类中实例化,只能被其自身实例化;
2、拥有一个保存类的实例的静态成员变量
3、拥有一个访问这个实例的公共的静态方法(常用getInstance()方法进行实例化单例类,通过instanceof操作符可以检测到类是否已经被实例化)

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

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

1、php的应用主要在于数据库应用, 所以一个应用中会存在大量的数据库操作, 使用单例模式, 则可以避免大量的new 操作消耗的资源。
2、如果系统中需要有一个类来全局控制某些配置信息, 那么使用单例模式可以很方便的实现. 这个可以参看ZF的FrontController部分。
3、在一次页面请求中, 便于进行调试, 因为所有的代码(例如数据库操作类db)都集中在一个类中, 我们可以在类中设置钩子, 输出日志,从而避免到处var_dump, echo。

代码实现:

<?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;

希望本文所述对大家的php程序设计有所帮助。

标签: PHP, 设计模式, 单例模式
分类: php技巧
时间: 2013-12-12

相关文章

  1. JavaScript设计模式之单例模式实例

    这篇文章主要介绍了JavaScript设计模式之单例模式实例,本文用一个实际例子讲解JavaScript中的单例模式,需要的朋友可以参考下 <Practical Common Lisp>的作者 Peter S ...
  2. C#设计模式之单例模式实例讲解

    这篇文章主要介绍了C#设计模式之单例模式实例讲解,本文讲解了单例模式的定义.单例模式的优缺点,需要的朋友可以参考下 前言 最近开始花点心思研究下设计模式,主要还是让自己写的代码可重用性高.保证代码可靠性.所谓设计模式,我 ...
  3. Python设计模式之单例模式实例

    这篇文章主要介绍了设计模式中的单例模式Python实例,需要的朋友可以参考下 注:使用的是Python 2.7. 一个简单实现 class Foo(object): __instance = None def __ini ...
  4. Python单例模式实例分析

    这篇文章主要介绍了Python单例模式,以实例形式分析了Python单例模式的具体使用技巧,具有一定参考借鉴价值,需要的朋友可以参考下 本文实例讲述了Python单例模式的使用方法.分享给大家供大家参考.具体如下: 方法 ...
  5. 基于php设计模式中单例模式的应用分析

    本篇文章是对php设计模式中单例模式的应用进行了详细的分析介绍,需要的朋友参考下 单例模式:简单的说,一个对象只负责一个特定的任务. 单例类: 1.构造函数需要标记为private,单例类不能再其他类中实例化,只能被其自 ...
  6. go语言单例模式(Singleton)实例分析

    这篇文章主要介绍了go语言单例模式(Singleton),实例分析了单例模式的原理与Go语言的实现技巧,需要的朋友可以参考下 本文实例讲述了go语言单例模式(Singleton)用法.分享给大家供大家参考.具体分析如下: ...
  7. php单态设计模式(单例模式)实例

    这篇文章主要介绍了php单态设计模式(单例模式)实例,单态模式的主要作用是保证在面向对象编程设计中,一个类只能有一个实例对象存在,需要的朋友可以参考下 单态设计模式也叫单例模式: 1.单态设计模式含义: 单态模式的主要作 ...
  8. php设计模式之单例模式的实例代码

    php单例模式:简单的说,一个对象只负责一个特定的任务. 单例类: 1.构造函数需要标记为private,单例类不能再其他类中实例化,只能被其自身实例化 2.拥有一个保存类的实例静态成员变量 3.拥有一个访问这个实例的公 ...
  9. 深入理解JavaScript系列(25):设计模式之单例模式详解

    这篇文章主要介绍了深入理解JavaScript系列(25):设计模式之单例模式详解,本文给出了多种单例模式的实现方式,需要的朋友可以参考下 介绍 从本章开始,我们会逐步介绍在JavaScript里使用的各种设计模式实现, ...
  10. C++设计模式之单例模式

    这篇文章主要介绍了C++设计模式之单例模式,本文同时给出了4种单例模式的实现代码,需要的朋友可以参考下 问题描述 现在,不管开发一个多大的系统(至少我现在的部门是这样的),都会带一个日志功能:在实际开发过程中,会专门有一 ...
  11. Yii实现MySQL多数据库和读写分离实例分析

    这篇文章主要介绍了Yii实现MySQL多数据库和读写分离的方法,以实例形式详细的分析了Yii数据库读写分离的方法,是开发大型项目非常实用的技巧,需要的朋友可以参考下 本文实例分析了Yii实现MySQL多数据库和读写分离的 ...
  12. JS中prototype的用法实例分析

    这篇文章主要介绍了JS中prototype的用法,实例分析了JS中prototype的常见使用技巧,具有一定参考借鉴价值,需要的朋友可以参考下 本文实例讲述了JS中prototype的用法.分享给大家供大家参考.具体分析 ...
  13. Builder模式实例分析

    Builder模式实例分析(C语言版) 转载时请注明出处:http://blog.csdn.net/absurd 设计模式.设计模式还是设计模式,设计模式已经被许多高手讲过了无数遍了.本来我无意再去重复被人重复过无数遍的 ...
  14. 设计模式之单例模式(Singleton)

    设计模式之单例模式(Singleton) 单例模式是一种常用的软件设计模式.在它的核心结构中只包含一个被称为单例类的特殊类.通过单例模式可以保证系统中一个类只有一个实例而且该实例易于外界访问,从而方便对实例个数的控制并节 ...
  15. 设计模式之单例模式(线程安全)

    可以说单例模式是所有设计模式中最简单的一种. 单例模式就是说系统中对于某类的只能有一个对象,不可能出来第二个. 单例模式也是23中设计模式中在面试时少数几个会要求写代码的模式之一.主要考察的是多线程下面单例模式的线程安全 ...
  16. PHP针对JSON操作实例分析

    这篇文章主要介绍了PHP针对JSON操作的常用方法,实例分析了json转数组.数组转json等技巧与相关注意事项,需要的朋友可以参考下 本文实例分析了PHP针对JSON操作.分享给大家供大家参考.具体分析如下: 由于JS ...
  17. Go语言中关闭带缓冲区的频道实例分析

    这篇文章主要介绍了Go语言中关闭带缓冲区的频道,实例分析了带缓冲区频道的原理与用法,以及关闭带缓冲区频道的技巧,具有一定参考借鉴价值,需要的朋友可以参考下 本文实例分析了Go语言中关闭带缓冲区的频道.分享给大家供大家参考 ...
  18. thinkphp模板的包含与渲染实例分析

    这篇文章主要介绍了thinkphp模板的包含与渲染,实例分析了模板包含与渲染的用法与相关技巧,是比较实用的技巧,需要的朋友可以参考下 本文实例讲述了thinkphp模板的包含与渲染.分享给大家供大家参考.具体分析如下: ...
  19. python概率计算器实例分析

    这篇文章主要介绍了python概率计算器实现方法,实例分析了Python实现概率计算的技巧,具有一定参考借鉴价值,需要的朋友可以参考下 本文实例讲述了python概率计算器实现方法.分享给大家供大家参考.具体实现方法如下 ...