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 相关文章推荐
ip签名探针
Oct 09 PHP
写一个用户在线显示的程序
Oct 09 PHP
PHP 数组入门教程小结
May 20 PHP
php实现上传图片保存到数据库的方法
Feb 11 PHP
PHP的Yii框架入门使用教程
Feb 15 PHP
PHP中用mysqli面向对象打开连接关闭mysql数据库的方法
Nov 05 PHP
thinkphp利用模型通用数据编辑添加和删除的实例代码
Nov 20 PHP
redirect_uri参数错误的解决方法(必看)
Feb 16 PHP
thinkPHP5.0框架模块设计详解
Mar 18 PHP
php注册系统和使用Xajax即时验证用户名是否被占用
Aug 31 PHP
浅谈PHP各环境下的伪静态配置
Mar 13 PHP
PHP获取学生成绩的方法
Nov 17 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数组最大值,最小值的代码
2011/10/31 PHP
PHP file_get_contents设置超时处理方法
2013/09/30 PHP
php日期操作技巧小结
2016/06/25 PHP
tp5.1 框架数据库-数据集操作实例分析
2020/05/26 PHP
JS date对象的减法处理实现代码
2010/12/28 Javascript
js获取浏览器的可视区域尺寸的实现代码
2011/11/30 Javascript
JS实现至少包含字母、大小写数字、字符的密码等级的两种方法
2015/02/03 Javascript
JavaScript过滤字符串中的中文与空格方法汇总
2016/03/07 Javascript
jQuery实现鼠标选文字发新浪微博的方法
2016/04/02 Javascript
深入理解jQuery之防止冒泡事件
2016/05/24 Javascript
详解VueJS 数据驱动和依赖追踪分析
2017/07/26 Javascript
解决微信小程序中转换时间格式IOS不兼容的问题
2019/02/15 Javascript
小程序如何构建骨架屏
2019/05/29 Javascript
JavaScript实现图片放大镜效果
2019/06/27 Javascript
微信小程序图片左右摆动效果详解
2019/07/13 Javascript
使用React代码动态生成栅格布局的方法
2020/05/24 Javascript
Vue 实现可视化拖拽页面编辑器
2021/02/01 Vue.js
在Python中使用模块的教程
2015/04/27 Python
pandas apply 函数 实现多进程的示例讲解
2018/04/20 Python
django请求返回不同的类型图片json,xml,html的实例
2018/05/22 Python
python实现大转盘抽奖效果
2019/01/22 Python
PyQT5 QTableView显示绑定数据的实例详解
2019/06/25 Python
python hashlib加密实现代码
2019/10/17 Python
python如何求100以内的素数
2020/05/27 Python
使用Filters滤镜弥补CSS3的跨浏览器问题以及兼容低版本IE
2013/01/23 HTML / CSS
Hotels.com加拿大:领先的在线住宿网站
2018/10/05 全球购物
麦当劳辞职信范文
2014/01/18 职场文书
社区义诊活动总结
2014/04/30 职场文书
银行柜员求职自荐书
2014/06/18 职场文书
民事赔偿协议书
2014/11/02 职场文书
2015学生会文艺部工作总结
2015/04/03 职场文书
解读Vue组件注册方式
2021/05/15 Vue.js
微信小程序基础教程之echart的使用
2021/06/01 Javascript
Vue Element-ui表单校验规则实现
2021/07/09 Vue.js
tree shaking对打包体积优化及作用
2022/07/07 Java/Android
MySQL远程无法连接的一些常见原因总结
2022/09/23 MySQL