Chinaunix首页 | 论坛 | 博客
  • 博客访问: 5096511
  • 博文数量: 921
  • 博客积分: 16037
  • 博客等级: 上将
  • 技术积分: 8469
  • 用 户 组: 普通用户
  • 注册时间: 2006-04-05 02:08
文章分类

全部博文(921)

文章存档

2020年(1)

2019年(3)

2018年(3)

2017年(6)

2016年(47)

2015年(72)

2014年(25)

2013年(72)

2012年(125)

2011年(182)

2010年(42)

2009年(14)

2008年(85)

2007年(89)

2006年(155)

分类:

2010-06-12 18:12:40

class DbConn {
  static $instance = false;

  private function __construct() {}

  public function getInstance() {
    if (!DbConn::$instance) {
      DbConn::$instance = new DbConn;
    }
    return DbConn::$instance;
  }
}


组合使用静态方法和静态变量保持这个实例,并且设置构造函数为私有,例化类而创建实例,这个类就不能被直接实例化。

Monostate Pattern(单态模式):类单件模式

 

class ApplicationConfig {
  var $_state;

  function ApplicationConfig() {
    $key = '__stealth_singleton_state_index__';
    if (!(array_key_exists($key, $GLOBALS) && is_array($GLOBALS[$key]))) {
      $GLOBALS[$key] = array();
    }

    $this->_state =& $GLOBALS[$key];
  }

  function set($key, $val) {
    $this->_state[$key] = $val;
  }

  function get($key) {
    if (array_key_exists($key, $this->_state)) {
      return $this->_state[$key];
    }
  }
}


在PHP中,通过把一个全局变量绑定到一个实例变量来实现MonoState。
这个技巧的核心是$this->state =& $GLOBALS[$key]; 。在确定$GLOBALS[$key]是一个数组后,代码绑定一个全局数组的引用给类变量$this->state。从而,任何$this->state的改变都自然而言地同步到全局数组,包括类的其它实例。

这个技巧能够在任何PHP的自动全局(superglobal)数组使用,尤其在用户消息队列$_SESSION中有很显著的效果。MonoState能通过你的代码为用户存储一系列的使用信息(要显示的信息可能是从另外一个页面传入的)。

资料:

阅读(2075) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~