全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

老生常谈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);
  }
   
 }

以上这篇老生常谈PHP面向对象之注册表模式就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。


# php面向对象注册表模式  # thinkPHP中钩子的两种配置调用方法详解  # thinkPHP中钩子的使用方法实例分析  # PHP钩子与简单分发方式实例分析  # thinkPHP基于反射实现钩子的方法分析  # php面向对象值单例模式  # PHP面向对象程序设计组合模式与装饰模式详解  # 老生常谈PHP面向对象之命令模式(必看篇)  # 老生常谈PHP面向对象之解释器模式  # PHP面向对象之事务脚本模式(详解)  # 浅谈PHP面向对象之访问者模式+组合模式  # PHP钩子实现方法解析  # 注册表  # 给大家  # 应用程序  # 全局变量  # 大家都  # 也就  # 老生常谈  # 把他  # 希望能  # 可以看到  # 只有一个  # 这篇  # 主要功能  # 留言版  # 小编  # 者也  # 大家多多  # 文本文件  # 面向对象  # 中因 


相关文章: 无锡制作网站公司有哪些,无锡优八网络科技有限公司介绍?  如何在景安服务器上快速搭建个人网站?  定制建站模板如何实现SEO优化与智能系统配置?18字教程  c++怎么用jemalloc c++替换默认内存分配器【性能】  网站建设制作、微信公众号,公明人民医院怎么在网上预约?  大连企业网站制作公司,大连2025企业社保缴费网上缴费流程?  ,制作一个手机app网站要多少钱?  建站之星后台密码遗忘?如何快速找回?  大连网站制作公司哪家好一点,大连买房网站哪个好?  如何快速搭建高效香港服务器网站?  详解jQuery停止动画——stop()方法的使用  济南企业网站制作公司,济南社保单位网上缴费步骤?  大型企业网站制作流程,做网站需要注册公司吗?  企业网站制作公司网页,推荐几家专业的天津网站制作公司?  网站视频制作书签怎么做,ie浏览器怎么将网站固定在书签工具栏?  网站专业制作公司,网站编辑是做什么的?好做吗?工作前景如何?  如何在Tomcat中配置并部署网站项目?  如何在Golang中引入测试模块_Golang测试包导入与使用实践  如何在IIS服务器上快速部署高效网站?  ,柠檬视频怎样兑换vip?  建站之星如何快速生成多端适配网站?  外贸公司网站制作哪家好,maersk船公司官网?  已有域名和空间如何搭建网站?  如何通过VPS建站无需域名直接访问?  公司网站制作价格怎么算,公司办个官网需要多少钱?  购物网站制作公司有哪些,哪个购物网站比较好?  建站168自助建站系统:快速模板定制与SEO优化指南  如何在阿里云虚拟主机上快速搭建个人网站?  黑客如何利用漏洞与弱口令入侵网站服务器?  图片制作网站免费软件,有没有免费的网站或软件可以将图片批量转为A4大小的pdf?  网站海报制作教学视频教程,有什么免费的高清可商用图片网站,用于海报设计?  如何用免费手机建站系统零基础打造专业网站?  Avalonia如何实现跨窗口通信 Avalonia窗口间数据传递  如何用西部建站助手快速创建专业网站?  python的本地网站制作,如何创建本地站点?  临沂网站制作企业,临沂第三中学官方网站?  如何在云主机上快速搭建多站点网站?  建站主机CVM配置优化、SEO策略与性能提升指南  北京制作网站的公司,北京铁路集团官方网站?  建站主机如何选?高性价比方案全解析  网站制作费用多少钱,一个网站的运营,需要哪些费用?  网站建设制作需要多少钱费用,自己做一个网站要多少钱,模板一般多少钱?  网站制作报价单模板图片,小松挖机官方网站报价?  建站之星如何防范黑客攻击与数据泄露?  清单制作人网站有哪些,近日“兴风作浪的姑奶奶”引起很多人的关注这是什么事情?  深圳网站制作设计招聘,关于服装设计的流行趋势,哪里的资料比较全面?  如何破解联通资金短缺导致的基站建设难题?  ,如何利用word制作宣传手册?  建站之星在线客服如何快速接入解答?  焦点电影公司作品,电影焦点结局是什么? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。