php 查询用户是否注册表,老生常谈PHP面向对象之注册表模式

namespace woo\base;

//基类

abstract class Registry {

abstract protected function get($key);

abstract protected function set($key,$val);

}

//请求级别,他的生存周期通常为从用户发起一个请求到后台程序回复这个请求为止

class RequestRegistry extends Registry{

private $values = array();

private static $instance;

private function __construct (){}

static function instance(){    // 单例,即这个类只有一个唯一的实例

if(!isset(self::$instance)){

self::$instance = new self();

}

return self::$instance;

}

protected function get($key){

if(isset($this->values[$key]){

return $this->values[$key];

}

return null;

}

protected function set($key,$val){

$this->values[$key] = $val;

}

static function getRequest(){

return self::instance()->get('request');

}

static function setRequest(\woo\controller\Request $request){      //\woo\controller\Request 主要功能是处理用户请求信息的一个类

return self::instance()->set('request',$request);

}

}

//会话级别,此示例中类的生存周期主要还是看SESSION的生存时间

class SessionRegistry extends Registry{

private static $instance;

private function __construct (){

session_start();

}

static function instance(){

if(!isset(self::$instance)){

self::$instance = new self();

}

return self::$instance;

}

protected function get($key){

if(isset($_SESSION[__CLASS__][$key])){

return $_SESSION[__CLASS__][$key];

}

return null;

}

protected function set($key,$val){

$_SESSION[__CLASS__][$key] = $val;

}

function setComplex(Complex $complex){

self::instance()->set('complex',$complex);

}

function getComplex(){

return self::instance()->get('complex');

}

}

//应用程序级别,此示例中因相关的值是保存在文本文件中,所以只要文件存在,保存的值也就一直存在

class ApplicationRegistry extends Registry{

private Static $instance;

private $freezedir = 'data';

private $values = array();

private $mtimes = array();

private function __construct (){}

static function instance(){

if(!isset(self::$instance)){

self::$instance = new self();

}

return self::$instance;

}

protected function get($key){

$path = $this->freezedir . DIRECTORY_SEPARATOR . $key; // 保存值的文件的路径

if(file_exists($path)){

clearstatcache();   // 清除filemtime缓存的上次记录的文件修改时间

$mtime = filemtime($path);

if(!isset($this->mtimes[$key])){

$this->mtimes[$key] = 0;

}

if($mtime > $this->mtimes[$key]){    // 文件内容假如被修改过,那么就要重新获取里面的值

$data = file_get_contents($path);

$this->mtimes[$key] = $mtime;

return ($this->values[$key] = unserialize($data));

}

}

if(isset($this->values[$key])){

return $this->values[$key];

}

return null;

}

protected function set ($key,$val){

$this->values[$key] = $val;

$path = $this->freezedir . DIRECTORY_SEPARATOR . $key;

file_put_contents($path,serialize($val));

$this->mtimes[$key] = time();

}

static function getDSN(){

return self::instance()->get('dsn');

}

static function setDSN($dsn){

return self::instance()->set('dsn',$dsn);

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值