文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>PHP 单件模式(单态模式)

PHP 单件模式(单态模式)

时间:2010-06-12  来源:yueming

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能通过你的代码为用户存储一系列的使用信息(要显示的信息可能是从另外一个页面传入的)。

资料:

  • Gloabal Variables Are Bad
  • Singleton Global Problems
  • Monostate Pattern
相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载