PHP面向对象之注册表模式
2018-06-22 05:19:55来源:未知 阅读 ()
注册表模式可似把他想像成一个全局变量,所有的模块都从这个全局变量里存取数据,或者也可以想象成某个酒吧的许愿墙或留言版,上面的内容大家都可以看到,也可以改写。这里主要按作用域介绍三种类别的注册表类(请求级别、会话级别、应用程序级别)。
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); } }
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:再谈PHP错误与异常处理
下一篇:hello
- PHP写UltraEdit插件脚本实现方法 2020-03-29
- php 带逗号千位符数字的处理方法 2020-03-28
- PHP三元运算符的结合性介绍 2020-03-28
- PHP静态延迟绑定和普通静态效率的对比 2020-03-28
- 基于php流程控制语句和循环控制语句 2020-03-28
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash