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 相关文章推荐
PHP4实际应用经验篇(6)
Oct 09 PHP
利用discuz自带通行证整合dedecms的方法以及文件下载
Mar 06 PHP
PHP 网络开发详解之远程文件包含漏洞
Apr 25 PHP
PHP的pcntl多进程用法实例
Mar 19 PHP
PHP实现删除字符串中任何字符的函数
Aug 11 PHP
Symfony2函数用法实例分析
Mar 18 PHP
CodeIgniter基于Email类发邮件的方法
Mar 29 PHP
PHP实现表单提交时去除斜杠的方法
Dec 26 PHP
PHP实现的mysql主从数据库状态检测功能示例
Jul 20 PHP
解决laravel 表单提交-POST 异常的问题
Oct 15 PHP
php使用redis的几种常见操作方式和用法示例
Feb 20 PHP
PHP数组基本用法与知识点总结
Jun 02 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
解析zend Framework如何自动加载类
2013/06/28 PHP
laravel 修改.htaccess文件 重定向public的解决方法
2019/10/12 PHP
alixixi runcode.asp的代码不错的应用
2007/08/08 Javascript
js获取系统的根路径实现介绍
2013/09/08 Javascript
当达到输入长度时表单自动切换焦点
2014/04/06 Javascript
Extjs grid panel自带滚动条失效的解决方法
2014/09/11 Javascript
jQuery实现行文字链接提示效果的方法
2015/03/10 Javascript
JavaScript数据结构与算法之集合(Set)
2016/01/29 Javascript
使用JavaScript判断用户输入的是否为正整数(两种方法)
2017/02/05 Javascript
canvas实现环形进度条效果
2017/03/23 Javascript
从零开始学习Node.js系列教程二:文本提交与显示方法
2017/04/13 Javascript
利用JavaScript如何查询某个值是否数组内
2017/07/30 Javascript
nodejs发送http请求时遇到404长时间未响应的解决方法
2017/12/10 NodeJs
nodejs多版本管理总结
2018/04/03 NodeJs
Layui数据表格 前后端json数据接收的方法
2019/09/19 Javascript
vue实现倒计时获取验证码效果
2020/04/17 Javascript
在python中的socket模块使用代理实例
2014/05/29 Python
详解Python中的序列化与反序列化的使用
2015/06/30 Python
修复CentOS7升级Python到3.6版本后yum不能正确使用的解决方法
2018/01/26 Python
Python实现针对给定字符串寻找最长非重复子串的方法
2018/04/21 Python
超简单的Python HTTP服务
2019/07/22 Python
Python 模拟动态产生字母验证码图片功能
2019/12/24 Python
解决Keras 与 Tensorflow 版本之间的兼容性问题
2020/02/07 Python
python实现从ftp上下载文件的实例方法
2020/07/19 Python
python3排序的实例方法
2020/10/20 Python
pandas map(),apply(),applymap()区别解析
2021/02/24 Python
结合CSS3的新特性来总结垂直居中的实现方法
2016/05/30 HTML / CSS
详解移动端h5页面根据屏幕适配的四种方案
2020/04/15 HTML / CSS
video实现有声音自动播放的实现方法
2020/05/20 HTML / CSS
美国儿童玩具、装扮和玩偶商店:Magic Cabin
2018/09/02 全球购物
香港百佳网上超级市场:PARKNSHOP.com
2020/06/10 全球购物
服装设计行业个人的自我评价
2013/12/20 职场文书
小学作文评语大全
2014/04/21 职场文书
小学生2015教师节演讲稿
2015/03/19 职场文书
pytorch 实现变分自动编码器的操作
2021/05/24 Python
Python实现拼音转换
2021/06/07 Python