注册表模式可似把他想像成一个全局变量,所有的模块都从这个全局变量里存取数据,或者也可以想象成某个酒吧的许愿墙或留言版,上面的内容大家都可以看到,也可以改写。这里主要按作用域介绍三种类别的注册表类(请求级别、会话级别、应用程序级别)。
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面向对象注册表模式
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件!
如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
暂无“老生常谈PHP面向对象之注册表模式”评论...
更新动态
2026年08月12日
2026年08月12日
- 小骆驼-《草原狼2(蓝光CD)》[原抓WAV+CUE]
- 群星《欢迎来到我身边 电影原声专辑》[320K/MP3][105.02MB]
- 群星《欢迎来到我身边 电影原声专辑》[FLAC/分轨][480.9MB]
- 雷婷《梦里蓝天HQⅡ》 2023头版限量编号低速原抓[WAV+CUE][463M]
- 群星《2024好听新歌42》AI调整音效【WAV分轨】
- 王思雨-《思念陪着鸿雁飞》WAV
- 王思雨《喜马拉雅HQ》头版限量编号[WAV+CUE]
- 李健《无时无刻》[WAV+CUE][590M]
- 陈奕迅《酝酿》[WAV分轨][502M]
- 卓依婷《化蝶》2CD[WAV+CUE][1.1G]
- 群星《吉他王(黑胶CD)》[WAV+CUE]
- 齐秦《穿乐(穿越)》[WAV+CUE]
- 发烧珍品《数位CD音响测试-动向效果(九)》【WAV+CUE】
- 邝美云《邝美云精装歌集》[DSF][1.6G]
- 吕方《爱一回伤一回》[WAV+CUE][454M]