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数据类型的总结分析
Jun 13 PHP
php curl模拟post请求小实例
Nov 13 PHP
PHP防范SQL注入的具体方法详解(测试通过)
May 09 PHP
CI(CodeIgniter)框架介绍
Jun 09 PHP
php中file_get_contents与curl性能比较分析
Nov 08 PHP
php简单生成随机数的方法
Jul 30 PHP
PHP实现搜索地理位置及计算两点地理位置间距离的实例
Jan 08 PHP
Thinkphp微信公众号支付接口
Aug 04 PHP
php实时倒计时功能实现方法详解
Feb 27 PHP
CentOS系统中PHP安装扩展的方式汇总
Apr 09 PHP
Laravel学习教程之路由模块
Aug 18 PHP
PHP的重载使用魔术方法代码实例详解
Feb 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
php 分页函数multi() discuz
2009/06/21 PHP
php中使用GD库做验证码
2016/03/31 PHP
基于ThinkPHP实现的日历功能实例详解
2017/04/15 PHP
Laravel如何实现自动加载类
2019/10/14 PHP
用js实现的检测浏览器和系统的函数
2009/04/09 Javascript
dotopAlert 提示用户需安装播放器的代码
2012/09/17 Javascript
jQuery实现可拖动的浮动层完整代码
2013/05/27 Javascript
原生javascript图片自动或手动切换示例附演示源码
2013/09/04 Javascript
jquery数组过滤筛选方法grep()简介
2014/06/06 Javascript
基于socket.io和node.js搭建即时通信系统
2014/07/30 Javascript
alert出数组中的随即值代码
2014/09/25 Javascript
jquery.ajax之beforeSend方法使用介绍
2014/12/08 Javascript
javascript正则表达式中的replace方法详解
2015/04/20 Javascript
AngularJS的表单使用详解
2015/06/17 Javascript
JS使用正则表达式除去字符串中重复字符的方法
2015/11/05 Javascript
javascript类型系统 Window对象学习笔记
2016/01/07 Javascript
30分钟快速掌握Bootstrap框架
2016/05/24 Javascript
AngularJS通过$sce输出html的方法
2016/09/22 Javascript
聊聊Vue中provide/inject的应用详解
2019/11/10 Javascript
javascript事件循环event loop的简单模型解释与应用分析
2020/03/14 Javascript
[01:03:54]Liquid vs IG 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/18 DOTA
Python嵌套式数据结构实例浅析
2019/03/05 Python
使用GitHub和Python实现持续部署的方法
2019/05/09 Python
Django利用cookie保存用户登录信息的简单实现方法
2019/05/27 Python
开启Django博客的RSS功能的实现方法
2020/02/17 Python
在django项目中导出数据到excel文件并实现下载的功能
2020/03/13 Python
Django 再谈一谈json序列化
2020/03/16 Python
查看已安装tensorflow版本的方法示例
2020/04/19 Python
Python Pandas数据分析工具用法实例
2020/11/05 Python
Python爬虫中Selenium实现文件上传
2020/12/04 Python
CSS3 box-sizing属性详解
2016/11/15 HTML / CSS
印度尼西亚最大的电商平台:Tokopedia(印尼版淘宝)
2017/12/02 全球购物
英国知名美妆护肤在线商城:Zest Beauty
2018/04/24 全球购物
学校实习推荐信
2015/03/27 职场文书
HTML通过表单实现酒店筛选功能
2021/05/18 HTML / CSS
OpenCV-Python实现轮廓的特征值
2021/06/09 Python