注册表模式

<?php
/**
 * 虽然面向对象编程的思想抵制使用全局变量
 * 但是全局变量在某些情况下利大于弊
 * 为何非要局限于一些不存在的限制,适合的才是最好的。
 *
 * 下面介绍两种可供全局使用的数据存储模式
 * 注册表模式和会话级注册表模式
 *
 */


/**
 * 基于键值对的全局唯一注册表
 */
class Register {
    private static $instance;
    private $values = array();
    
    public static function instance() {
        if (!isset(self::$instance)) {
            self::$instance = new self;
        }
        
        return self::$instance;
    }
    
    public function get($key) {
        if (isset($this->values[$key]))
            return $this->values[$key];
        return FALSE;
    }
    
    public function set($key, $val) {
        $this->values[$key] = $val;
    }
}

/**
 * 会话级别的注册表
 * 本质是将会话数据存入session
 */
class Register2 {
    private static $instance;
    private $values = array();
    
    public static function instance() {
        if (!isset(self::$instance)) {
            self::$instance = new self;
        }
        
        return self::$instance;
    }
    
    public function get($key) {
        if (isset($_SESSION[__CLASS__][$key]))
            return $_SESSION[__CLASS__][$key];
        return FALSE;
    }
    
    public function set($key, $val) {
        $_SESSION[__CLASS__][$key][$key] = $val;
    }
}
原文地址:https://www.cnblogs.com/mtima/p/3180873.html