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 相关文章推荐
discuz authcode 经典php加密解密函数解析
Jul 12 PHP
php图片处理:加水印、缩略图的实现(自定义函数:watermark、thumbnail)
Dec 02 PHP
php curl常见错误:SSL错误、bool(false)
Dec 28 PHP
解析PHP获取当前网址及域名的实现代码
Jun 23 PHP
PHP中的str_repeat函数在JavaScript中的实现
Sep 16 PHP
php文件上传的简单实例
Oct 19 PHP
php邮箱地址正则表达式验证
Nov 13 PHP
thinkPHP使用pclzip打包备份mysql数据库的方法
Apr 30 PHP
Laravel中log无法写入问题的解决
Jun 17 PHP
PHP十六进制颜色随机生成器功能示例
Jul 24 PHP
php在windows环境下获得cpu内存实时使用率(推荐)
Feb 08 PHP
php7 新增功能实例总结
May 25 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为php增加openssl模块的方法
2011/06/14 PHP
php后台多用户权限组思路与实现程序代码分享
2012/02/13 PHP
PHP实现的权重算法示例【可用于游戏根据权限来随机物品】
2019/02/15 PHP
PHP7.3.10编译安装教程
2019/10/08 PHP
向大师们学习Javascript(视频与PPT)
2009/12/27 Javascript
锋利的jQuery 要点归纳(三) jQuery中的事件和动画(上:事件篇)
2010/03/24 Javascript
同一页面多个商品倒计时JS 基于面向对象的javascript
2012/02/16 Javascript
HTML长文本截取含有HTML代码同样适用的两种方法
2013/07/31 Javascript
js获取当前地址 JS获取当前URL的示例代码
2014/02/26 Javascript
JavaScript定义变量和变量优先级问题探讨
2014/10/11 Javascript
javascript设计模式之中介者模式Mediator
2014/12/30 Javascript
Javascript数据结构与算法之列表详解
2015/03/12 Javascript
jQuery实现的支持IE的html滑动条
2015/03/16 Javascript
JavaScript判断用户是否对表单进行了修改的方法
2015/03/18 Javascript
javascript验证内容为数字以及长度为10的简单实例
2016/08/20 Javascript
利用Node.JS实现邮件发送功能
2016/10/21 Javascript
JavaScript无阻塞加载和defer、async详解
2017/02/26 Javascript
微信小程序实现多个按钮toggle功能的实例
2017/06/13 Javascript
jquery radio 动态控制选中失效问题的解决方法
2018/02/28 jQuery
JavaScript中创建原子的方法总结
2018/08/26 Javascript
vue项目中axios请求网络接口封装的示例代码
2018/12/18 Javascript
Node.js API详解之 zlib模块用法分析
2020/05/19 Javascript
Vue中使用JsonView来展示Json树的实例代码
2020/11/16 Javascript
[01:37]全新的一集《真视界》——TI7总决赛
2017/09/21 DOTA
python简单实现获取当前时间
2016/08/27 Python
Python实现ssh批量登录并执行命令
2016/10/25 Python
Python编程把二叉树打印成多行代码
2018/01/04 Python
Python将DataFrame的某一列作为index的方法
2018/04/08 Python
使用pandas实现csv/excel sheet互相转换的方法
2018/12/10 Python
Mac在python3环境下安装virtualwrapper遇到的问题及解决方法
2019/07/09 Python
css3实现图片遮罩效果鼠标hover以后出现文字
2013/11/05 HTML / CSS
社区党员先进事迹
2014/01/22 职场文书
医生个人年终总结
2015/02/28 职场文书
工作试用期自我评价
2015/03/10 职场文书
公司承诺书格式范文
2015/04/28 职场文书
《曾国藩家书》读后感——读家书,立家风
2019/08/21 职场文书