Zendframework的注册模式
来源:互联网 发布:coreldraw和淘宝美工 编辑:程序博客网 时间:2024/06/06 00:13
有段时间没更新博客了,最近一段时间在捣鼓框架,几个框架倒来倒去的。主要的还是研究了zend framework。现介绍下zend framework的注册模式。
很多时候,有经验的php程序员都告诫我们,慎用全局变量,全局变量不好管理呀。稍不注意就会致使全局变量滥用。Zend framework 提供了一个注册模式来对全局变量进行管理。它的实质是类似对一个数组进行操作。首先注册变量,把全局变量set进数组,取的时候get 全局变量。其中它继承了spl 的ArrayObject类来进行操作。注册模式一般会跟单例模式一起用。为了保证注册唯一呀。下面贴上zend framework的Register代码。
<?php
classZend_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 functionsetInstance(Zend_Registry $registry)
{
if (self::$_registry !== null) {
require_once 'Zend/Exception.php';
throw new Zend_Exception('Registryis already initialized');
}
self::setClassName(get_class($registry));
self::$_registry = $registry;
}ArrayObject
//初始化
protected static function init()
{
self::setInstance(newself::$_registryClassName());
}
public static functionsetClassName($registryClassName = 'Zend_Registry')
{
if (self::$_registry !== null) {
require_once 'Zend/Exception.php';
throw new Zend_Exception('Registryis already initialized');
}
if (!is_string($registryClassName)) {
require_once 'Zend/Exception.php';
throw newZend_Exception("Argument is not a class name");
}
/**
* @see Zend_Loader
*/
require_once 'Zend/Loader.php';
Zend_Loader::loadClass($registryClassName);
self::$_registryClassName =$registryClassName;
}
//注销单例
public static function _unsetInstance()
{
self::$_registry = null;
}
//得到已注册的数据
public static function get($index)
{
$instance = self::getInstance();
if(!$instance->offsetExists($index)) {
require_once 'Zend/Exception.php';
throw new Zend_Exception("Noentry 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;
}
returnself::$_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);
}
}
- Zendframework的注册模式
- Zendframework登陆注册实例教程
- zendframework的session管理
- zendFrameWork的工作目录
- zendframework
- ZendFramework-1.8.x 的 配置
- 创建应用ZendFramework的项目
- ZendFramework 缓存的简单应用
- zendframework的安装与配置
- zendframework的安装与配置
- 【zendframework+javascript】数据的传输
- ”凤毛麟角的ZendFramework“-ZendFramework使用Jquery第三方插件。
- 【zendframework】ZendFramework的介绍、安装和实例运行
- zendframework 框架的学习遇到的问题
- ZendFramework的介绍、安装和实例运行
- ZendFramework的介绍、安装和实例运行
- ZendFramework 自定义Helper类的注意事项。
- ”凤毛麟角的ZendFramework“-2-Zend_Exception-1
- Android 用APN来获取手机号
- mesa opengl 安装
- Android 获取设备信息
- ubuntu用apt-get方法安装mysql5 + Apache2 + PHP5+Phpmyadmin
- Postfix+Dovecot邮件服务器配置指南,Postfix使用Dovecot认证,配置环境CentOS5.5
- Zendframework的注册模式
- taskset榨干服务器CPU:让进程运行在指定的CPU内核
- NTLM Protocol - 2. DES 编码
- POJ 2118 Matrix线性递推
- 免安装版的Tomcat注册为windows服务
- Android 获得图片的方法
- DbgridEh本地过滤与多列排序功能
- HashMap 对于获得 键值 的两种实现方式 ,要对 hashmap treemap 的实现 多关注
- PanoramaGL library类库详细解析