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 之入门篇
Dec 04 PHP
使用apache模块rewrite_module (转)
Feb 14 PHP
《PHP编程最快明白》第五讲:php目录、文件操作
Nov 01 PHP
Zend Studio使用技巧两则
Apr 01 PHP
PHP如何使用Memcached
Apr 05 PHP
PHPStorm+XDebug进行调试图文教程
Jun 13 PHP
功能强大的php分页函数
Jul 20 PHP
Zend Framework入门教程之Zend_Mail用法示例
Dec 08 PHP
PHP编程实现阳历转换为阴历的方法实例
Aug 08 PHP
Laravel框架控制器,视图及模型操作图文详解
Dec 04 PHP
php判断IP地址是否在多个IP段内
Aug 18 PHP
详细分析PHP7与PHP5区别
Jun 26 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
桌面中心(二)数据库写入
2006/10/09 PHP
phplist及phpmailer(组合使用)通过gmail发送邮件的配置方法
2016/03/30 PHP
php实现产品加入购物车功能(1)
2020/07/23 PHP
Thinkphp5.0 框架视图view的比较标签用法分析
2019/10/12 PHP
PHP 实现 WebSocket 协议原理与应用详解
2020/04/22 PHP
PHP数组与字符串互相转换实例
2020/05/05 PHP
重定向实现代码
2006/11/20 Javascript
javascript 屏蔽鼠标键盘的几段代码
2008/01/02 Javascript
Javascript 获取滚动条位置等信息的函数
2009/09/08 Javascript
React.js入门学习第一篇
2016/03/30 Javascript
JavaScript数组去重由慢到快由繁到简(优化篇)
2016/08/26 Javascript
通过网页查看JS源码中汉字显示乱码的解决方法
2016/10/26 Javascript
关于angular js_$watch监控属性和对象详解
2017/04/24 Javascript
Angular弹出模态框的两种方式
2017/10/19 Javascript
node.js的exports、module.exports与ES6的export、export default深入详解
2017/10/26 Javascript
JS原型继承四步曲及原型继承图一览
2017/11/28 Javascript
详解微信小程序调用支付接口支付
2019/04/28 Javascript
JavaScript内置对象math,global功能与用法实例分析
2019/06/10 Javascript
JavaScript检测是否开启了控制台(F12调试工具)
2020/10/02 Javascript
解决vuex刷新数据消失问题
2020/11/12 Javascript
9种python web 程序的部署方式小结
2014/06/30 Python
Python调用微信公众平台接口操作示例
2017/07/08 Python
Python3 itchat实现微信定时发送群消息的实例代码
2019/07/12 Python
Python爬虫学习之获取指定网页源码
2019/07/30 Python
使用Python paramiko模块利用多线程实现ssh并发执行操作
2019/12/05 Python
解决HTML5手机端页面缩放的问题
2017/10/27 HTML / CSS
Paradigit比利时电脑卖场:购买笔记本、电脑、平板和外围设备
2016/11/28 全球购物
红色康乃馨酒店:Red Carnation Hotels
2017/06/22 全球购物
什么时候用assert
2015/05/08 面试题
servlet面试题
2012/08/20 面试题
护理专业学生的求职信范文
2013/12/11 职场文书
中学生学雷锋活动心得体会
2014/03/10 职场文书
协议书模板
2014/04/23 职场文书
JavaScript实现复选框全选功能
2021/04/11 Javascript
javascript实现计算器功能详解流程
2021/11/01 Javascript
Java 关于String字符串原理上的问题
2022/04/07 Java/Android