zend_registry 源码分析

<?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); }

}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值