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 10 PHP
PHP循环输出指定目录下的所有文件和文件夹路径例子(简单实用)
May 10 PHP
PHP中SimpleXML函数用法分析
Nov 26 PHP
PHP提示Warning:phpinfo() has been disabled函数禁用的解决方法
Dec 17 PHP
Joomla语言翻译类Jtext用法分析
May 05 PHP
Yii全局函数用法示例
Jan 22 PHP
Laravel实现表单提交
May 07 PHP
php数据库的增删改查 php与javascript之间的交互
Aug 31 PHP
50个优秀经典PHP算法大集合 附源码
Aug 26 PHP
phpcmsv9.0任意文件上传漏洞解析
Oct 20 PHP
PHP解决高并发的优化方案实例
Dec 10 PHP
如何使用php生成zip压缩包
Apr 21 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
德生1994机评
2021/03/02 无线电
PHP分页显示制作详细讲解
2006/12/05 PHP
封装一个PDO数据库操作类代码
2009/09/09 PHP
用php来限制每个ip每天浏览页面数量的实现思路
2015/02/24 PHP
PHP安全下载文件的方法
2016/04/07 PHP
Ubuntu 16.04下安装PHP 7过程详解
2017/03/28 PHP
Laravel Validator 实现两个或多个字段联合索引唯一
2019/05/08 PHP
js保留小数点后几位的写法
2014/01/03 Javascript
jQuery打印图片pdf、txt示例代码
2014/07/22 Javascript
深入浅出讲解ES6的解构
2016/08/03 Javascript
IONIC自定义subheader的最佳解决方案
2016/09/22 Javascript
JS实现禁止用户使用Ctrl+鼠标滚轮缩放网页的方法
2017/04/28 Javascript
在vue中封装可复用的组件方法
2018/03/01 Javascript
JavaScript引用类型Date常见用法实例分析
2018/08/08 Javascript
基于JavaScript实现贪吃蛇游戏
2020/03/16 Javascript
Python设计模式中单例模式的实现及在Tornado中的应用
2016/03/02 Python
python中的 zip函数详解及用法举例
2020/02/16 Python
python实现可下载音乐的音乐播放器
2020/02/25 Python
Python实现屏幕录制功能的代码
2020/03/02 Python
Python使用进程Process模块管理资源
2020/03/05 Python
Python json转字典字符方法实例解析
2020/04/13 Python
Python如何避免文件同名产生覆盖
2020/06/09 Python
HTML5 video 事件应用示例
2014/09/11 HTML / CSS
JBL美国官方商店:扬声器、耳机等
2019/12/01 全球购物
主要的Ajax框架都有什么
2013/11/14 面试题
医务工作者先进事迹材料
2014/01/26 职场文书
护理不良事件检讨书
2014/02/06 职场文书
幼儿园教师工作感言
2014/02/15 职场文书
廉洁自律承诺书
2014/03/27 职场文书
兴趣小组活动总结
2014/05/05 职场文书
幼儿园五一劳动节活动总结
2015/02/09 职场文书
食品质检员岗位职责
2015/04/08 职场文书
事业单位财务人员岗位职责
2015/04/14 职场文书
初中思想品德教学反思
2016/02/24 职场文书
十大最帅动漫男主 碓冰拓海上榜,第一是《灌篮高手》男主角
2022/03/18 日漫
详细介绍Next.js脚手架完整搭建封装
2022/04/26 Javascript