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程序员,特别是从php4,甚至是PHP3中成长起来的程序员,很多都不习惯使用抛出异常这种错误处理方式。虽然php5引入了异常处理机制,但是很多php程序员还是没有真正的掌握并使用它。
    2009-06-06
  • phpmyadmin打开很慢的解决方法

    phpmyadmin打开很慢的解决方法

    这篇文章主要介绍了phpmyadmin打开很慢的解决方法,一般这个问题的原因是phpmyadmin的版本检测造成的,因为phpmyadmin的官网有时会打不开,这时只要取消代码中的版本检测即可解决这个问题,需要的朋友可以参考下
    2014-04-04
  • PHP 的ArrayAccess接口 像数组一样来访问你的PHP对象

    PHP 的ArrayAccess接口 像数组一样来访问你的PHP对象

    如果想让对象使用起来像一个 PHP 数组,那么我们需要实现 ArrayAccess 接口
    2010-10-10
  • php 对输入信息的进行安全过滤的函数代码

    php 对输入信息的进行安全过滤的函数代码

    php 对输入信息的过滤代码,主要是针对php安全问题
    2012-06-06
  • php5.3不能连接mssql数据库的解决方法

    php5.3不能连接mssql数据库的解决方法

    这篇文章主要介绍了php5.3不能连接mssql数据库的解决方法,针对php5.3之后不支持mssql_connect函数提供了对应的解决方法,具有一定的参考借鉴价值,需要的朋友可以参考下
    2014-12-12
  • pdo中使用参数化查询sql

    pdo中使用参数化查询sql

    在使用参数化查询的情况下,数据库服务器不会将参数的内容视为SQL指令的一部份来处理,而是在数据库完成 SQL 指令的编译后,才套用参数运行,因此就算参数中含有具破坏性的指令,也不会被数据库所运行。
    2011-08-08
  • 详解php反序列化

    详解php反序列化

    这篇文章主要介绍了php反序列化的相关知识,文中讲解非常细致,代码帮助各位更好的理解和学习,感兴趣的朋友可以了解下
    2020-06-06
  • PHP文本操作类

    PHP文本操作类

    PHP文本操作类...
    2006-11-11
  • 五款PHP代码重构工具推荐

    五款PHP代码重构工具推荐

    本文收集了五款出色的PHP代码重构工具,以帮助你完善更加优秀的项目。非常的实用,有需要的朋友可以好好研究一下
    2014-10-10
  • PHP执行linux系统命令的常用函数使用说明

    PHP执行linux系统命令的常用函数使用说明

    php下执行linux系统命令的函数,需要的朋友可以参考下。
    2010-04-04

最新评论