时间:2021-05-18
注册表模式可似把他想像成一个全局变量,所有的模块都从这个全局变量里存取数据,或者也可以想象成某个酒吧的许愿墙或留言版,上面的内容大家都可以看到,也可以改写。这里主要按作用域介绍三种类别的注册表类(请求级别、会话级别、应用程序级别)。
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面向对象之注册表模式就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
作为java中的一个重要理念,说起面向对象也是老生常谈了。在找资料的时候多是很专业的术语,又或者很多框架的知识点合集,其实大部分人刚看资料的时候是不能理解的。本
Python操作注册表步骤之1.打开注册表对注册表进行操作前,必须打开注册表。在Python中,可以使用以下两个函数:RegOpenKey和RegOpenKey
本文接上文“老生常谈反射之Class类的使用(必看篇)”,以编写一个用来获取类的信息(成员函数、成员变量、构造函数)的工具类来讲解"反射之获取类的信息"1、获取
老生常谈的配置但是还是需要说明一下EurekaApplication@EnableEurekaServer指定为server端@EnableEurekaServ
本文实例讲述了php设计模式之适配器模式原理、用法及注意事项。分享给大家供大家参考,具体如下:在这个有没有对象都要高呼“面向对象”的年代,掌握面向对象会给我们带