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

 更新时间:2014年10月11日 09:51:48   投稿:junjie  
这篇文章主要介绍了php实现设计模式中的单例模式详解,本文详细讲解了php中的单例模式,并给出了代码实例,需要的朋友可以参考下

【概要】

保证一个类仅有一个实例,并且提供一个访问它的全局访问点【GOF95】

【特点】

1、一个类只有一个实例
2、它必须自行创建这个实例
3、必须自行向整个系统提供这个实例

【结构图】

【主要角色】

Singleton定义一个Instance操作,允许客户访问它的唯一实例。Instance是一个类方法。负责创建它的唯一的实例。

【优缺点】

1、对唯一实例的受控访问
2、缩小命名空间 单例模式是对全局变量的一种改进。它避免了那些存储唯一实例的全局变量污染命名空间
3、允许对操作和表示的精华 单例类可以有子类。而且用这个扩展类的实例来配置一个应用是很容易的。你可以用你所需要的类的实例在运行时刻配置应用。
4、允许可变数目的实例(多例模式)
5、比类操作更灵活

【适用性】

1、当类只能有一个实例而且客户可以从一个众所周知的访问点访问它时
2、当这个唯一实例应该是通过子类化可扩展的。并且用户应该无需更改代码就能使用一个扩展的实例时。

【单例模式php实例】

复制代码 代码如下:

<?php
 /**
 * 单例模式
 * -------------
 * @author   zhaoxuejie <zxj198468@gmail.com>
 * @package  design pattern
 * @version  v1.0 2011-12-14
 */
class Singleton {
 
 //私有静态成员变量,保存全局实例
 private static $instance = NULL;
 
 //私有构造方法,保证外界无法直接实例化
 private function __construct(){}
 
 //静态方法,返回此类唯一实例
 public static function getInstance(){
  if(!isset(self::$instance)){
   $c = __CLASS__;
   self::$instance = new $c;
  }
  return self::$instance;
 }
 
 //测试用方法
 public function info(){
  return 'ok';
 }
 
 //防止克隆
 public function __clone(){
  trigger_error('Clone is not allowed.', E_USER_ERROR);
 }
}

$s = Singleton::getInstance();
echo $s->info();
?>

相关文章

  • php数值转换时间及时间转换数值用法示例

    php数值转换时间及时间转换数值用法示例

    这篇文章主要介绍了php数值转换时间及时间转换数值用法,涉及php strtotime及date等函数实现日期的字符串格式与Unix时间戳格式转换相关操作技巧,需要的朋友可以参考下
    2017-05-05
  • PHP中单引号与双引号的区别分析

    PHP中单引号与双引号的区别分析

    在PHP中,我们可以使用单引号或者双引号来表示字符串。不过我们作为开发者,应该了解其中的区别。单引号与双引号对于定义字符一个是可以解析变量一个是会把变量直接输出来,同时单引号与双引号在字符处理上单引号要优与双引号
    2014-08-08
  • PHP 表单提交给自己

    PHP 表单提交给自己

    使用PHP进行Web开发,表单(Form)的使用随处可见,利用其属性Action和Method可以指定表单的内容要发送处理的URL以及如何将表单数据发送到服务器。
    2008-07-07
  • PHP获取路径和目录的方法总结【必看篇】

    PHP获取路径和目录的方法总结【必看篇】

    下面小编就为大家带来一篇PHP获取路径和目录的方法总结【必看篇】。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-03-03
  • php使用redis的几种常见操作方式和用法示例

    php使用redis的几种常见操作方式和用法示例

    这篇文章主要介绍了php使用redis的几种常见操作方式和用法,结合实例形式总结分析了PHP使用redis实现字符串缓存、队列模拟、乐观锁与悲观锁实现、发布和订阅等相关操作技巧,需要的朋友可以参考下
    2020-02-02
  • PHP封装的微信公众平台接口开发操作类完整示例

    PHP封装的微信公众平台接口开发操作类完整示例

    这篇文章主要介绍了PHP封装的微信公众平台接口开发操作类,结合完整实例形式分析了php微信开发所涉及的配置、验证、接收、响应、文本、语音、图片等相关操作技巧,需要的朋友可以参考下
    2018-06-06
  • PHP的单引号和双引号 字符串效率

    PHP的单引号和双引号 字符串效率

    经常有人问我,听说在PHP中处理字符串用单引号会快,那么如果存在变量替换的时候,是使用单引号连接快呢,还是双引号快呢?
    2009-05-05
  • nginx下安装php7+php5

    nginx下安装php7+php5

    本文给大家分享的是在nginx下安装php7,并且实现与php5共存,非常的实用,有需要的小伙伴可以参考下
    2016-07-07
  • PHP执行zip与rar解压缩方法实现代码

    PHP执行zip与rar解压缩方法实现代码

    PHP执行zip与rar解压缩方法 先放着,以后研究,有地方要用到。
    2010-12-12
  • [企业公众号]升级到[企业微信]之后发送消息失败的解决方法

    [企业公众号]升级到[企业微信]之后发送消息失败的解决方法

    这篇文章主要介绍了[企业公众号]升级到[企业微信]之后发送消息失败的解决方法,涉及微信接口的修改相关操作,需要的朋友可以参考下
    2017-06-06

最新评论