您的位置:首页 > 编程语言 > PHP开发

zend_registry 源码分析

2012-11-08 16:44 148 查看
<?php
//本类也可以说是个例子而已, 可以自定义,本类的作用是用数组的方式存储对象,是一个对象仓库
class Zend_Registry extends ArrayObject
{
//默认的注册类的名字,可通过静态方法来修改为自定义的类
private static $_registryClassName = 'Zend_Registry';
//单例变量
private static $_registry = null;
//单例
public static function getInstance()
{
if (self::$_registry === null) {
self::init();
}
return self::$_registry;
}
//看来自定义的类需要继承自本类
public static function setInstance(Zend_Registry $registry)
{
if (self::$_registry !== null) {
require_once 'Zend/Exception.php';
throw new Zend_Exception('Registry is already initialized');
}
self::setClassName(get_class($registry));//get_class返回对象的类名
self::$_registry = $registry;
}
//用变量的值生成指定类的单例
protected static function init()
{
self::setInstance(new self::$_registryClassName());
}
//设置自定义的注册类,前提是单例变量未赋值
public static function setClassName($registryClassName = 'Zend_Registry')
{
if (self::$_registry !== null) {
require_once 'Zend/Exception.php';
throw new Zend_Exception('Registry is already initialized');
}
if (!is_string($registryClassName)) {
require_once 'Zend/Exception.php';
throw new Zend_Exception("Argument is not a class name");
}
if (!class_exists($registryClassName)) {
require_once 'Zend/Loader.php';
Zend_Loader::loadClass($registryClassName);
}
self::$_registryClassName = $registryClassName;
}
//注销单例
public static function _unsetInstance()
{
self::$_registry = null;
}
//得用arrayObject自带的方法取出索引是$index的元素
public static function get($index)
{
$instance = self::getInstance();
if (!$instance->offsetExists($index)) {
require_once 'Zend/Exception.php';
throw new Zend_Exception("No entry is registered for key '$index'");
}
return $instance->offsetGet($index);
}
//设置一个新的元素
public static function set($index, $value)
{
$instance = self::getInstance();
$instance->offsetSet($index, $value);
}
//判断一个索引是否已存在
public static function isRegistered($index)
{
if (self::$_registry === null) {
return false;
}
return self::$_registry->offsetExists($index);
}
//初始化
public function __construct($array = array(), $flags = parent::ARRAY_AS_PROPS)
{
parent::__construct($array, $flags);
}
//判断一个索引是否已存在
public function offsetExists($index)
{
return array_key_exists($index, $this);
}
}

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: