澳门威利斯人_威利斯人娱乐「手机版」

来自 威利斯人娱乐 2019-05-06 12:48 的文章
当前位置: 澳门威利斯人 > 威利斯人娱乐 > 正文

PHP面向对象之注册表模式,老生常谈PHP面向对象

 注册表格局可似把她想像成一个全局变量,全体的模块都从那个全局变量里存取数据,也许也足以想像成某些酒吧的许下愿望墙或留言版,下面的内容大家都得以见到,也得以改写。这里首要按功能域介绍三类别型的挂号表类(请求等级、会话等级、应用程序等级)。

注册表格局可似把他想像成三个全局变量,全部的模块都从那几个全局变量里存取数据,只怕也得以设想成有些酒吧的许下心愿墙或留言版,下边的开始和结果我们都可以看看,也可以改写。这里关键按作用域介绍三种等级次序的注册表类(请求品级、会话等级、应用程序等级)。

namespace woobase;

//基类
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(woocontrollerRequest $request){      //woocontrollerRequest 主要功能是处理用户请求信息的一个类
        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);
    }

 }
namespace woobase;

//基类
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(woocontrollerRequest $request){      //woocontrollerRequest 主要功能是处理用户请求信息的一个类
    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);
  }

 }

本文由澳门威利斯人发布于威利斯人娱乐,转载请注明出处:PHP面向对象之注册表模式,老生常谈PHP面向对象

关键词: 澳门威利斯人