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中判断一个字符串包含另一个字符串的方法
Mar 19 PHP
Zend studio文件注释模板设置方法
Sep 29 PHP
ECMall支持SSL连接邮件服务器的配置方法详解
May 19 PHP
如何让thinkphp在模型中自动完成session赋值小教程
Sep 05 PHP
使用PHP和HTML5 FormData实现无刷新文件上传教程
Sep 06 PHP
PHP实现通过正则表达式替换回调的内容标签
Jun 15 PHP
Apache PHP MySql安装配置图文教程
Aug 27 PHP
php把字符串指定字符分割成数组的方法
Mar 12 PHP
Laravel 对某一列进行筛选然后求和sum()的例子
Oct 10 PHP
laravel 框架结合关联查询 when()用法分析
Nov 22 PHP
关于PHP中interface的用处详解
Jul 26 PHP
php中try catch捕获异常实例详解
Aug 06 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
获得Google PR值的PHP代码
2007/01/28 PHP
百度地图API应用之获取用户的具体位置
2014/06/10 PHP
用PHP解决的一个栈的面试题
2014/07/02 PHP
thinkphp文件处理类Dir.class.php的用法分析
2014/12/08 PHP
一个完整的PHP类包含的七种语法说明
2015/06/04 PHP
php计算整个mysql数据库大小的方法
2015/06/19 PHP
thinkPHP中钩子的两种配置调用方法详解
2016/11/11 PHP
在laravel中实现事务回滚的方法
2019/10/10 PHP
IE和Mozilla的兼容性汇总event
2007/08/12 Javascript
javascript 导出数据到Excel(处理table中的元素)
2009/12/18 Javascript
JQuery FlexiGrid的asp.net完美解决方案 dotNetFlexGrid-.Net原生的异步表格控件
2010/09/12 Javascript
JavaScript生成随机字符串的方法
2015/03/19 Javascript
轻量级网页遮罩层jQuery插件用法实例
2015/07/31 Javascript
javascript实现随机读取数组的方法
2015/08/03 Javascript
跟我学习javascript的定时器
2015/11/19 Javascript
浅析nodejs实现Websocket的数据接收与发送
2015/11/19 NodeJs
javascript的几种继承方法介绍
2016/03/22 Javascript
JavaScript的Backbone.js框架入门学习指引
2016/05/07 Javascript
总结javascript中的六种迭代器
2016/08/16 Javascript
使用mint-ui实现省市区三级联动效果的示例代码
2018/02/09 Javascript
JavaScript求一个数组中重复出现次数最多的元素及其下标位置示例
2018/07/23 Javascript
在小程序中使用canvas的方法示例
2018/09/17 Javascript
微信小程序开发实现的选项卡(窗口顶部/底部TabBar)页面切换功能图文详解
2019/05/14 Javascript
JavaScript如何判断input数据类型
2020/02/06 Javascript
element-ui tree结构实现增删改自定义功能代码
2020/08/31 Javascript
Python中 Lambda表达式全面解析
2016/11/28 Python
用scikit-learn和pandas学习线性回归的方法
2019/06/21 Python
keras 获取某层输出 获取复用层的多次输出实例
2020/05/23 Python
详解python安装matplotlib库三种失败情况
2020/07/28 Python
HTML5基于flash实现播放RTMP协议视频的示例代码
2020/12/04 HTML / CSS
馥绿德雅美国官方网站:Rene Furterer头皮护理专家
2019/05/01 全球购物
大一学生职业生涯规划
2014/03/11 职场文书
股权转让协议书
2014/12/07 职场文书
会议通知
2015/04/15 职场文书
详解PyTorch模型保存与加载
2022/04/28 Python
python高温预警数据获取实例
2022/07/23 Python