• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

Zend的Registry机制的使用说明_php实例

php 搞代码 3年前 (2022-01-26) 13次浏览 已收录 0个评论

项目过程中有很多全局变量, 需(本文来源gaodai#ma#com搞@@代~&码网

搞代gaodaima码

要全局存储,是否是使用全局变量来进行存储?那就弱爆了。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) <BR>    { <BR>        $instance = self::getInstance(); <BR>        $instance->offsetSet($index, $value); <br><br>    } </P><P>


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

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

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

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

class A{ <BR>    private $_instance; <BR>    public static function getInstance(){ <BR>        ... <BR>    } <br><br>    protected function __construct(){ <BR>        ... <BR>    } <br><br>    public function setVal(){ <BR>        ... <BR>    } <BR>} <br><br>$a = A::getInstance(); <br><br>$a->setVal();<BR>


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

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

A::setVal();

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

class A{ <BR>    private static $_instance; <BR>    public static function getInstance(){ <BR>        if(self::_instance !==null){ <BR>            return $this->_instance; <BR>        } else { <BR>            return new A(); <BR>        } <BR>    } <br><br>    public function __construct(){ <br><br>    } <br><br>    public static function setV(){ <BR>        $a = self::getInstance(); <BR>        $a->setVal(); <BR>    } <br><br>    public function setVal(){ <BR>        ... <BR>    } <BR>} <br><br>A::setV();<BR>


实际上就是直接把__construct()放开成为public,然后实例化它


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:Zend的Registry机制的使用说明_php实例
喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址