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 相关文章推荐
Get或Post提交值的非法数据处理
Oct 09 PHP
php 模拟POST|GET操作实现代码
Jul 20 PHP
基于Zend的Config机制的应用分析
May 02 PHP
php多文件上传实现代码
Feb 20 PHP
ThinkPHP自动转义存储富文本编辑器内容导致读取出错的解决方法
Aug 08 PHP
微信自定义菜单的处理开发示例
Apr 16 PHP
php实现无限级分类(递归方法)
Aug 06 PHP
PHP编程获取音频文件时长的方法【基于getid3类】
Apr 20 PHP
php cli模式下获取参数的方法
May 05 PHP
safari下载文件自动加了html后缀问题
Nov 09 PHP
PHP下载文件函数与用法示例
Sep 27 PHP
Laravel6.0.4中将添加计划任务事件的方法步骤
Oct 15 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实现删除指定目录下相关文件的方法
2014/10/20 PHP
YII框架http缓存操作示例
2019/04/29 PHP
Jquery升级新版本后选择器的语法问题
2010/06/02 Javascript
对象无length属性时IE6/IE7中无法将其转换成伪数组(ArrayLike)
2011/07/31 Javascript
Javascript无阻塞加载具体方式
2013/06/28 Javascript
JS中的this变量的使用介绍
2013/10/21 Javascript
javascipt匹配单行和多行注释的正则表达式
2013/11/20 Javascript
使用js实现按钮控制文本框加1减1应用于小时+分钟
2013/12/09 Javascript
收集json解析的四种方法分享
2014/01/17 Javascript
Javascript的表单验证-初识正则表达式
2016/03/18 Javascript
JS实现含有中文字符串的友好截取功能分析
2017/03/13 Javascript
Angular排序实例详解
2017/06/28 Javascript
微信小程序之数据缓存的实例详解
2017/09/29 Javascript
IE浏览器下JS脚本提交表单后,不能自动提示问题解决方法
2019/06/04 Javascript
express + jwt + postMan验证实现持久化登录
2019/06/05 Javascript
JavaScript 面向对象基础简单示例
2019/10/02 Javascript
谈一谈vue请求数据放在created好还是mounted里好
2020/07/27 Javascript
[52:07]完美世界DOTA2联赛PWL S3 LBZS vs access 第二场 12.10
2020/12/13 DOTA
Python中声明只包含一个元素的元组数据方法
2014/08/25 Python
对Django中内置的User模型实例详解
2019/08/16 Python
解决c++调用python中文乱码问题
2020/07/29 Python
如果NULL和0作为空指针常数是等价的,那我到底该用哪一个
2014/09/16 面试题
What is view? why do we have view?
2012/06/22 面试题
水电工岗位职责
2014/02/12 职场文书
全国优秀辅导员事迹材料
2014/05/14 职场文书
优秀语文教师事迹
2014/05/18 职场文书
幼儿园欢迎词范文
2015/01/26 职场文书
2015年父亲节寄语
2015/03/23 职场文书
爱心捐书倡议书
2015/04/27 职场文书
银行资信证明
2015/06/17 职场文书
新闻稿格式范文
2015/07/18 职场文书
员工升职自我评价
2019/03/26 职场文书
实用求职信模板范文
2019/05/13 职场文书
Python读取文件夹下的所有文件实例代码
2021/04/02 Python
python 常用的异步框架汇总整理
2021/06/18 Python
React-vscode使用jsx语法的问题及解决方法
2021/06/21 Javascript