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 相关文章推荐
一个可以删除字符串中HTML标记的PHP函数
Oct 09 PHP
php flv视频时间获取函数
Jun 29 PHP
九个你必须知道而且又很好用的php函数和特点
Aug 08 PHP
PDO防注入原理分析以及注意事项
Feb 25 PHP
浅谈php错误提示及查错方法
Jul 14 PHP
YII2框架中excel表格导出的方法详解
Jul 21 PHP
php生成复杂验证码(倾斜,正弦干扰线,黏贴,旋转)
Mar 12 PHP
微信公众号开发之获取位置信息php代码
Jun 13 PHP
PHP获取当前系统时间的方法小结
Oct 03 PHP
Referer原理与图片防盗链实现方法详解
Jul 03 PHP
浅谈Laravel POST,PUT,PATCH 路由的区别
Oct 15 PHP
PHP7 foreach() 函数修改
Mar 09 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 用sock技术发送邮件的函数
2007/07/21 PHP
php开发微信支付获取用户地址
2015/10/04 PHP
针对多用户实现头像上传功能PHP代码 适用于登陆页面制作
2016/08/17 PHP
PHP调用API接口实现天气查询功能的示例
2017/09/21 PHP
Javascript代码混淆综合解决方案-Javascript在线混淆器
2006/12/18 Javascript
Js如何判断客户端是PC还是手持设备简单分析
2012/11/22 Javascript
javascript将数组插入到另一个数组中的代码
2013/01/10 Javascript
在firefox和Chrome下关闭浏览器窗口无效的解决方法
2014/01/16 Javascript
JavaScript检测上传文件大小的方法
2015/07/22 Javascript
javascript实现去除HTML标签的方法
2016/12/26 Javascript
Bootstrap实现提示框和弹出框效果
2017/01/11 Javascript
React 子组件向父组件传值的方法
2017/07/24 Javascript
JavaScript中Object基础内部方法图
2018/02/05 Javascript
浅谈Vue 数据响应式原理
2018/05/07 Javascript
React组件重构之嵌套+继承及高阶组件详解
2018/07/19 Javascript
JavaScript中this的全面解析及常见实例
2019/05/14 Javascript
150行Node.js实现的dns代理工具
2019/08/02 Javascript
vue父子组件通信的高级用法示例
2019/08/29 Javascript
解决layui 三级联动下拉框更新时回显的问题
2019/09/03 Javascript
JS中this的4种绑定规则详解
2020/02/04 Javascript
[02:23]完美世界全国高校联赛街访DOTA2第一期
2019/11/28 DOTA
python实现简单socket通信的方法
2016/04/19 Python
Python的mysql数据库的更新如何实现
2017/07/31 Python
python3.4下django集成使用xadmin后台的方法
2017/08/15 Python
python爬取淘宝商品销量信息
2018/11/16 Python
简单了解Django ContentType内置组件
2019/07/23 Python
工程造价与财务管理专业应届生求职信
2013/10/06 职场文书
党员思想汇报范文
2013/12/30 职场文书
复核员上岗演讲稿
2014/01/05 职场文书
咖啡厅创业计划书范本
2014/01/22 职场文书
学习党的群众路线剖析材料
2014/10/09 职场文书
餐饮食品安全责任书
2015/01/29 职场文书
银行资信证明
2015/06/17 职场文书
老干部座谈会主持词
2015/07/03 职场文书
教师节领导致辞
2015/07/29 职场文书
vue引入Excel表格插件的方法
2021/04/28 Vue.js