首页 > 编程 > PHP > 正文

Zend的Registry机制的使用说明

2020-03-22 16:46:18
字体:
来源:转载
供稿:网友
项目过程中有很多html' target='_blank'>全局变量, 需要全局存储,是否是使用全局变量来进行存储?那就弱爆了。Zend使用Registry机制(注册表)存储对象和值,是一个存储对象和值的容器。Zend_Registry这个类就是做这个目的代码示例
Zend_Registry::set('config', $config);
Zend_Registry::get('config');代码分析
这两个函数是最常用的两个函数。我们来看一下这个类class Zend_Registry extends ArrayObject这个类继承自ArrayObjectArrayObject implements IteratorAggregate , Traversable , ArrayAccess , Serializable , Countable ArrayObject是一个对象集合,相当于其他语言的泛型集合的概念。重点了解下void ArrayObject::offsetSet ( mixed $index , mixed $newval ), 这个函数就是hashtable中的设置keyvalue,只是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教程

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表