《PHP学习:Zend Framework教程之Zend_Registry对象用法分析》要点:
本文介绍了PHP学习:Zend Framework教程之Zend_Registry对象用法分析,希望对您有用。如果有疑问,可以联系我们。
本文实例讲述了Zend Framework教程之Zend_Registry对象用法.分享给大家供大家参考,具体如下:PHP实例
使用对象注册表(Registry)PHP实例
对象注册表(或称对象仓库)是一个用于在整个应用空间(application space)内存储对象和值的容器.通过把对象存储在其中,我们可以在整个项目的任何地方使用同一个对象.这种机制相当于一种全局存储.PHP实例
我们可以通过Zend_Registry类的静态方法来使用对象注册表,另外,由于该类是一个数组对象,你可以使用数组形式来拜访其中的类方法.PHP实例
1. 设置Registry中的值PHP实例
要保存一项内容到注册表中,我们可以使用静态办法 set().PHP实例
例 1. set() 使用示例:PHP实例
Zend_Registry::set('index', $value);
$value可以是一个对象、数组或者标量.你可以再次使用set()来为注册表中已有的值设置一个新值.PHP实例
index参数可以是一个标量,即字符串或整数,就像使用数组一样,类似于数组的索引/键名.PHP实例
2. 获取Registry中的值PHP实例
可以使用 get()办法来获取Registry中某项内容的值.PHP实例
例 2. get() 办法示例:PHP实例
$value = Zend_Registry::get('index');
getInstance()返回静态registry对象.
registry对象是可迭代的(iterable).PHP实例
例 3. 迭代一个registry对象:PHP实例
$registry = Zend_Registry::getInstance(); foreach ($registry as $index => $value) { echo "Registry index $index contains:/n"; var_dump($value); }
3. 创建一个Registry对象PHP实例
除了可以使用静态方法来拜访Registry对象之外,你可以直接实例化它,就像使用普通的对象一样.PHP实例
如果通过静态方法来拜访registry对象的实例,它很方便进行静态存储,你可以在程序中的任何地方拜访它.PHP实例
如果使用传统的new 办法来创建registry的实例,则你可以使用数组一样的方式来初始化registry中的内容.PHP实例
例 4. 创建一个registry对象PHP实例
$registry = new Zend_Registry(array('index' => $value));
在创建这个对象实例之后,你可以使用数组对象办法来使用它,或者你可以把这个对象实例通过静态办法setInstance()设置为静态对象实例.PHP实例
例 5. Example of initializing the static registryPHP实例
$registry = new Zend_Registry(array('index' => $value)); Zend_Registry::setInstance($registry);
如果静态的注册表对象已经被初始化过,则setInstance()办法会抛出一个Zend_Exception异常.PHP实例
4. 像拜访数组一样拜访Registry对象PHP实例
如果你要一次拜访或设置多个值,你会发现使用数组方式是很方便的.PHP实例
例 6. array 方式拜访示例:PHP实例
$registry = Zend_Registry::getInstance(); $registry['index'] = $value; var_dump( $registry['index'] );
5. 对象方式拜访RegistryPHP实例
你会发现使用面向对象风格来拜访registry对象也是方便的,对象中的属性名称作为索引. 要这样做,你需要使用ArrayObject::ARRAY_AS_PROPS选项来创建registry对象,并初始化静态实例.你要在静态的registry被第一次拜访之前就完成这个工作.小心使用这个选项,因为某些版本的PHP在使用这个选项时会有bug.PHP实例
例 7. 对象形式的拜访:PHP实例
//在你的bootstrap代码中: $registry = new Zend_Registry(array(), ArrayObject::ARRAY_AS_PROPS) Zend_Registry::setInstance($registry); $registry->tree = 'apple'; . . . //在程序的任何其它地方: $registry = Zend_Registry::getInstance(); echo $registry->tree; // echo's "apple" $registry->index = $value; var_dump($registry->index);
6. 查询一个索引是否存在PHP实例
可以使用静态办法isRegistered()来查询是否某个特定的索引已经设置了相应的值.PHP实例
例 8. isRegistered() 示例:PHP实例
if (Zend_Registry::isRegistered($index)) { $value = Zend_Registry::get($index); }
要确定一个数组对象中的某个特定索引的值是否设定,可以使用isset()函数,就像在普通的数组中那样使用.PHP实例
例 9. isset() 示例:PHP实例
$registry = Zend_Registry::getInstance(); // using array-access syntax if (isset($registry['index'])) { var_dump( $registry['index'] ); } // using object-access syntax, if enabled if (isset($registry->index)) { var_dump( $registry->index ); }
7. 扩展Registry对象PHP实例
静态registry对象是类Zend_Registry的一个实例.如果你想给它增加功能,你可以继承Zend_Registry类,然后指定使用这个类来拜访对象注册表.你可以使用静态方法setClassName()来指定使用这个类.注意这个类一定要是Zend_Registry的子类.PHP实例
例 10. 指定静态注册表的类名:PHP实例
Zend_Registry::setClassName('My_Registry'); Zend_Registry::set('index', $value);
如果你在registry已经被拜访过后尝试设定该类名,则registry抛出一个异常.建议你在boostrap代码(即index.php)中设置该类名.PHP实例
8. 删除静态注册表PHP实例
尽管这不是必需的,你可以使用_unsetInstance()办法来删除registry的静态实例.PHP实例
[注意] 数据丢失的风险PHP实例
在使用_unsetInstance()的时候,静态注册表中的所有数据都会丢失并且无法恢复.PHP实例
有时你可能需要_unsetInstance()这个办法.例如你想在已经初始化过registry对象之后,再使用setInstance()或 setClassName(),那么你可以使用_unsetInstance()先把静态实例删除了,然后才能使用那些办法.PHP实例
例 11. _unsetInstance() 示例:PHP实例
Zend_Registry::set('index', $value); Zend_Registry::_unsetInstance(); // 改变我们要使用的类 Zend_Registry::setClassName('My_Registry'); Zend_Registry::set('index', $value);
更多关于zend相关内容感兴趣的读者可查看本站专题:《Zend FrameWork框架入门教程》、《php优秀开发框架总结》、《Yii框架入门及常用技巧总结》、《ThinkPHP入门教程》、《php面向对象程序设计入门教程》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》PHP实例
希望本文所述对大家基于Zend Framework框架的PHP程序设计有所赞助.PHP实例
欢迎参与《PHP学习:Zend Framework教程之Zend_Registry对象用法分析》讨论,分享您的想法,维易PHP学院为您提供专业教程。
转载请注明本页网址:
http://www.vephp.com/jiaocheng/7263.html