Zend的Registry机制的使用说明


Posted in PHP onMay 02, 2013

项目过程中有很多全局变量, 需要全局存储,是否是使用全局变量来进行存储?那就弱爆了。Zend使用Registry机制(注册表)存储对象和值,是一个存储对象和值的容器。

Zend_Registry这个类就是做这个目的

代码示例
Zend_Registry::set('config', $config);
Zend_Registry::get('config');

代码分析
这两个函数是最常用的两个函数。我们来看一下这个类

class Zend_Registry extends ArrayObject

这个类继承自ArrayObject

ArrayObject implements IteratorAggregate , Traversable , ArrayAccess , Serializable , Countable

ArrayObject是一个对象集合,相当于其他语言的泛型集合的概念。

重点了解下void ArrayObject::offsetSet ( mixed $index , mixed $newval ), 这个函数就是hashtable中的设置key,value,只是key,value可以是任何类型的。

好了,回到Zend_Registry, 看看set做了些什么事情

set函数

public static function set($index, $value) 
    { 
        $instance = self::getInstance(); 
        $instance->offsetSet($index, $value);     }

一个是实例化Register,另一个是调用offsetSet方法,将index和value设置进去。

offset方法很好理解,但是为什么要使用getInstance方法呢?

这里建议大家好好看看,这个是结合类静态方法的单例模式。

我们一般的单例模式写成:

class A{ 
    private $_instance; 
    public static function getInstance(){ 
        ... 
    }     protected function __construct(){ 
        ... 
    } 
    public function setVal(){ 
        ... 
    } 
} 
$a = A::getInstance(); 
$a->setVal();

这样在调用之前就需要实例化一个类,虽然这个实例化实际上是单例,但感觉还是不舒服

这边的register就做到了直接使用静态方法调用

A::setVal();

大致的代码思路我写了个demo

class A{ 
    private static $_instance; 
    public static function getInstance(){ 
        if(self::_instance !==null){ 
            return $this->_instance; 
        } else { 
            return new A(); 
        } 
    }     public function __construct(){ 
    } 
    public static function setV(){ 
        $a = self::getInstance(); 
        $a->setVal(); 
    } 
    public function setVal(){ 
        ... 
    } 
} 
A::setV();

实际上就是直接把__construct()放开成为public,然后实例化它
PHP 相关文章推荐
php连接数据库代码应用分析
May 29 PHP
无JS,完全php面向过程数据分页实现代码
Aug 27 PHP
PHP转换文件夹下所有文件编码的实现代码
Jun 06 PHP
php 验证码(倾斜,正弦干扰线,黏贴,旋转)
Jun 29 PHP
PHP curl 抓取AJAX异步内容示例
Sep 09 PHP
php 删除cookie方法详解
Dec 01 PHP
php+mysql数据库实现无限分类的方法
Dec 12 PHP
php生成图片验证码的实例讲解
Aug 03 PHP
thinkPHP实现递归循环栏目并按照树形结构无限极输出的方法
May 19 PHP
PHP工厂模式简单实现方法示例
May 23 PHP
PHP输出Excel PHPExcel的方法
Jul 26 PHP
JS中彻底删除JSON对象组成的数组中的元素
Sep 22 PHP
Zend的MVC机制使用分析(二)
May 02 #PHP
Zend的MVC机制使用分析(一)
May 02 #PHP
基于Zend的Captcha机制的应用
May 02 #PHP
PHP静态调用非静态方法的应用分析
May 02 #PHP
Mysql中分页查询的两个解决方法比较
May 02 #PHP
记录mysql性能查询过程的使用方法
May 02 #PHP
基于MySQL分区性能的详细介绍
May 02 #PHP
You might like
PHPMailer发送HTML内容、带附件的邮件实例
2014/07/01 PHP
php实现refresh刷新页面批量导入数据的方法
2014/12/23 PHP
PHP页面输出时js设置input框的选中值
2016/09/30 PHP
PHP微信开发之微信录音临时转永久存储
2018/01/26 PHP
window.open的功能全解析
2006/10/10 Javascript
js Form.elements[i]的使用实例
2011/11/13 Javascript
深入理解JavaScript系列(6) 强大的原型和原型链
2012/01/15 Javascript
JQuery 文本框回车跳到下一个文本框示例代码
2013/08/30 Javascript
JavaScript对内存分配及管理机制详细解析
2013/11/11 Javascript
Jquery模仿Baidu、Google搜索时自动补充搜索结果提示
2013/12/26 Javascript
javascript中不等于的代码是什么怎么写
2013/12/29 Javascript
jQuery过滤选择器:not()方法使用介绍
2014/04/20 Javascript
详解基于Bootstrap扁平化的后台框架Ace
2015/11/27 Javascript
基于JQuery的$.ajax方法进行异步请求导致页面闪烁的解决办法
2016/05/10 Javascript
Vue实现virtual-dom的原理简析
2017/07/10 Javascript
javaScript实现滚动条事件详解
2020/03/24 Javascript
详解使用React全家桶搭建一个后台管理系统
2017/11/04 Javascript
微信小程序wepy框架笔记小结
2018/08/08 Javascript
微信小程序实用代码段(收藏版)
2019/12/17 Javascript
微信小程序自定义菜单切换栏tabbar组件代码实例
2019/12/30 Javascript
vue学习笔记之过滤器的基本使用方法实例分析
2020/02/01 Javascript
python获取网页状态码示例
2014/03/30 Python
详解用TensorFlow实现逻辑回归算法
2018/05/02 Python
Python+OpenCV 实现图片无损旋转90°且无黑边
2019/12/12 Python
pyenv虚拟环境管理python多版本和软件库的方法
2019/12/26 Python
pyqt5实现井字棋的示例代码
2020/12/07 Python
Myprotein丹麦官网:欧洲第一运动营养品牌
2019/04/15 全球购物
高中生自我鉴定范文
2013/10/30 职场文书
查环查孕证明
2014/01/10 职场文书
护理职业生涯规划书
2014/01/24 职场文书
代理班主任的自我评价
2014/02/04 职场文书
总经理助理职责
2014/02/04 职场文书
解除劳动合同协议书范本2014
2014/09/25 职场文书
2014年挂职干部工作总结
2014/12/06 职场文书
写自招自荐信的绝招!
2019/04/19 职场文书
试用1103暨1103、1101同门大比武 [ DAIWEI ]
2022/04/05 无线电