博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Zend的Registry机制
阅读量:7043 次
发布时间:2019-06-28

本文共 1567 字,大约阅读时间需要 5 分钟。

项目过程中有很多全局变量, 需要全局存储,是否是使用全局变量来进行存储?那就弱爆了。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,mixedindex,mixednewval ), 这个函数就是hashtable中的设置key,value,只是key,value可以是任何类型的。

 

好了,回到Zend_Registry, 看看set做了些什么事情

set函数

1
2
3
4
5
6
public 
static 
function 
set
($index, $value)
    
{
        
$instance = self::getInstance();
        
$instance->offsetSet($index, $value);
 
    
}

一个是实例化Register,另一个是调用offsetSet方法,将index和value设置进去。

offset方法很好理解,但是为什么要使用getInstance方法呢?

这里建议大家好好看看,这个是结合类静态方法的单例模式。

我们一般的单例模式写成:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class 
A{
    
private 
$_instance
;
    
public 
static 
function 
getInstance(){
        
...
    
}
     
    
protected 
function 
__construct(){
        
...
    
}
     
    
public 
function 
setVal(){
        
...
    
}
}
 
$a 
= A::getInstance();
 
$a
->setVal();

 

这样在调用之前就需要实例化一个类,虽然这个实例化实际上是单例,但感觉还是不舒服

这边的register就做到了直接使用静态方法调用

A::setVal();

大致的代码思路我写了个demo

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
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,然后实例化它

转载地址:http://lseal.baihongyu.com/

你可能感兴趣的文章
私有云的未来将是什么样的?
查看>>
Visual Studio “15”的第四个预览版发布
查看>>
android动画之interpolator和typeEvaluator用法详解
查看>>
排序算法之Bogo排序
查看>>
Speed up your Internet browsing on Linux with a DNS Cache server
查看>>
我的失败与伟大 —— 合作伙伴的甄别
查看>>
APP运营中必须关注的7大数据指标
查看>>
kettle数据同步的五种方案
查看>>
如何用IE的开发人员工具选择Iframe里面的元素
查看>>
linux 常用命令(1) grep
查看>>
第三方开发的网贷系统安全如何保障
查看>>
Java千百问_05面向对象(006)_is-a,has-a,like-a是什么
查看>>
Android SDK r20.x更新时,没有Android API的问题
查看>>
PHPWind发布新产品架构图
查看>>
GitHub学习笔记
查看>>
RecyclerView+Cardview学习探索
查看>>
【Android】Android自定义带board的圆角控件
查看>>
struts 设置默认 action
查看>>
基于VLC的播放器开发
查看>>
[js插件]分享一个文章内容信息提示插件Colortip
查看>>