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

来源:中文源码网    浏览: 次    日期:2018年9月2日

【下载文档:  老生常谈PHP面向对象之注册表模式.txt 】

(友情提示:右键点上行txt文档名->目标另存为)

老生常谈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动画注册表,老生常谈PHP面向对象之注册表模式相关推荐

  1. 【JavaLearn】(22)jQuery介绍、选择器、事件、动画、DOM编程、操作CSS、表单验证

    目录 1. jQuery定义和特点 1.1 jQuery 入门 1.2 jQuery对象和DOM对象 2. jQuery 选择器 2.1 基本选择器 2.2 属性选择器 2.3 位置选择器 2.4 表 ...

  2. 【JavaLearn】#(22)jQuery介绍、选择器、事件、动画、DOM编程、操作CSS、表单验证

    1. jQuery定义和特点 1.1 jQuery 入门 对 JavaScript 进行了封装,降低了使用JavaScript的难度,可以大幅提高开发效率(Write less, do more) j ...

  3. 表单提交、页面注册案例

    表单属性设置 <form>标签 表示表单标签,定义整体的表单区域 action属性 设置表单数据提交地址 method属性 设置表单提交的方式,一般有"GET"方式和& ...

  4. mysql重装要删注册表_Mysql重装问题—删除注册表

    最近不小心突然卸载了mysql,结果重装mysql老是安装不成功,不是第四步出问题,就是第三步出问题无响应,卸了再重新安装,还是不行.究其原因就是系统里的注册表没有删除干净. 解决步骤: 1.在&qu ...

  5. 用java写注册表单_利用HTML表单标签编写一个注册页面

    今天我们来写一个注册页面 form表单 先来利用表单标签制作一个简单的注册页面,给大家说说标签的结构: 页面结构大体就是这样子的~ 利用HTML表单标签编写一个注册页面 表单标签: 所有需要提交到服务 ...

  6. 如何在注册表里计算机用户名,可以通过注册表修改电脑的密码 ?怎么做的?

    可以通过注册表修改电脑的密码 ?怎么做的?以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 可以通过注册表修改电脑的密码 ...

  7. 计算机注册表管理,如何打开计算机注册表编辑器

    如何打开计算机注册表编辑器?我们可以单击"开始-运行",或按住计算机左下角的Win键(Tianzi键)并同时按R键以打开运行窗口,在运行窗口中输入regedit,确定,打开注册表编 ...

  8. 产品需求文档、需求结构图、数据字典、全局说明、用例描述、需求描述、逻辑流程、原型设计、页面交互、登录注册、词汇表、数据统计、用户表设计、接口需求、功能清单、业务流程图、Axure原型、prd、文档实例

    产品需求文档.需求结构图.数据字典.全局说明.用例描述.逻辑流程.原型设计.页面交互.登录注册.词汇表.数据统计.用户表设计.接口需求.功能清单.业务流程图.Axure原型.prd.产品需求文档实例 ...

  9. Javascript实现表单检验(如注册界面)

    Javascript实现表单检验(以注册界面为例) 正如我们所见到的,好多网页都有注册界面,在注册界面中,最常见的即是包括用户名.密码.请重复输入密码和一个"注册"按钮,今天我们就 ...

最新文章

  1. R探索新数据分析(Exploratory Data Analysis,EDA)
  2. 【vue】webpack打包vue项目并且运行在Tomcat里面
  3. 推荐3个C++系统项目!初级开发者必学!
  4. JAVA程序中 + 号的使用
  5. 入门前端学习路线图【送书】
  6. php自动生成mysql的触发代码。
  7. body div js 放大图片_jquery图片放大插件鼠标悬停图片放大效果
  8. VS_VERSION_INFO信息的读取
  9. 电脑无线网络与服务器共享,图文详解win7笔记本如何实现内置无线局域网卡共享...
  10. 为防盗装自动门 不想也会影响生活
  11. 【Vue】—异步组件
  12. Start Developing iOS Apps Today系列之应用程序(七)
  13. 2021.05.26【R语言】丨clusterProfiler注释大肠杆菌GO/KEGG富集图
  14. ‘Staff‘ object has no attribute ‘data‘
  15. mysql 数据库内存不足_MySQL数据库内存不足怎么办 MySQL数据库使用教程
  16. 银行机构的分类、特点及转型方向
  17. 《C#之集训1-20121019c#基础》
  18. 让你彻底理解线性代数中的概念——《线性代数的本质》系列视频笔记
  19. 首款物联网防火墙himqtt开源
  20. 【转帖】Windows文件系统过滤驱动开发教程-楚狂人

热门文章

  1. js 拉勾网效果_Node.js 中实践基于 Redis 的分布式锁实现
  2. Spinnaker:云原生多云环境持续部署的未来这样玩!
  3. 皮一皮:据说金庸老爷子的凌波微步已被证实存在并已经广为流传...
  4. 每日一皮:这就是成都马拉松???...
  5. 每日一皮:当我突然有一个很棒的调试想法...
  6. Netty 解决粘包和拆包问题的四种方案
  7. 德国艺术家用99部手机成功在Google地图上制造交通阻塞
  8. 便利删除_全家便利官方道歉,我们深扒了来龙去脉
  9. cpythonjava解释xml_详解python使用lxml操作xml格式文件
  10. TensorRT安装及使用教程