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 相关文章推荐
关于mysql 字段的那个点为是定界符
Jan 15 PHP
php 页面执行时间计算代码
Dec 04 PHP
Zend的Registry机制的使用说明
May 02 PHP
深入eAccelerator与memcached的区别详解
Jun 06 PHP
PHP中strtr字符串替换用法详解
Nov 26 PHP
php使用pdo连接并查询sql数据库的方法
Dec 24 PHP
两种php给图片加水印的实现代码
Apr 18 PHP
PHP单例模式与工厂模式详解
Aug 29 PHP
Yii框架常见缓存应用实例小结
Sep 09 PHP
解决在laravel中leftjoin带条件查询没有返回右表为NULL的问题
Oct 15 PHP
PHP超全局变量实现原理及代码解析
Sep 01 PHP
PHP编程一定要改掉的5个不良习惯
Sep 18 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
PHP数组内存耗用太多问题的解决方法
2010/04/05 PHP
php绘图之生成饼状图的方法
2015/01/24 PHP
浅谈php中fopen不能创建中文文件名文件的问题
2017/02/06 PHP
一款JavaScript压缩工具:X2JSCompactor
2007/06/13 Javascript
不懂JavaScript应该怎样学
2008/04/16 Javascript
jquery attr 设定src中含有&(宏)符号问题的解决方法
2011/07/26 Javascript
jquery绑定原理 简单解析与实现代码分享
2011/09/06 Javascript
Jquery之Ajax运用 学习运用篇
2011/09/26 Javascript
5分钟理解JavaScript中this用法分享
2013/11/09 Javascript
jquery在项目中做复选框时遇到的一些问题笔记
2013/11/17 Javascript
Jquery创建层显示标题和内容且随鼠标移动而移动
2014/01/26 Javascript
javascript的document.referrer浏览器支持、失效情况总结
2014/07/18 Javascript
基于js与flash实现的网站flv视频播放插件代码
2014/10/14 Javascript
node.js中的http.request方法使用说明
2014/12/14 Javascript
教你使用javascript简单写一个页面模板引擎
2015/05/05 Javascript
用JavaScript实现页面重定向功能的教程
2015/06/04 Javascript
node.js中 stream使用教程
2016/08/28 Javascript
javascript鼠标跟随运动3种效果(眼球效果,苹果菜单,方向跟随)
2016/10/27 Javascript
Vue实现typeahead组件功能(非常靠谱)
2017/08/26 Javascript
JS运动特效之完美运动框架实例分析
2018/01/24 Javascript
vue组件之间的数据传递方法详解
2019/04/19 Javascript
微信小程序实现多选框全选与取消全选功能示例
2019/05/14 Javascript
Python多线程学习资料
2012/12/19 Python
Python def函数的定义、使用及参数传递实现代码
2014/08/10 Python
在Python中操作列表之List.append()方法的使用
2015/05/20 Python
Python中操作文件之write()方法的使用教程
2015/05/25 Python
pyqt远程批量执行Linux命令程序的方法
2019/02/14 Python
Python3.5以上版本lxml导入etree报错的解决方案
2019/06/26 Python
Django如何将URL映射到视图
2019/07/29 Python
Python %r和%s区别代码实例解析
2020/04/03 Python
预订全球最佳旅行体验:Viator
2018/03/30 全球购物
Jimmy Choo美国官网:周仰杰鞋子品牌
2018/06/08 全球购物
如何理解委托
2012/01/06 面试题
大学理论知识学习自我鉴定
2014/04/28 职场文书
田径运动会广播稿
2015/08/19 职场文书
男方家长婚礼答谢词
2015/09/29 职场文书