快速业务通道

php设计模式介绍之注册模式

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-05-22
个实例都将访问同 一个数组。我们把这个新类叫做ReGIStryGlobal以区别于我们前面开发的类,并反映这种实现方式的特 性。

以下为反映这种思想的测试用例(它应该看起来很熟悉)。

代码:

class RegistryGlobalPHP4TestCase extends UnitTestCase {
function testRegistryGlobal() {
$reg =& new RegistryGlobal;
$this->assertFalse ($reg->isValid(''key''));
$this->assertNull($reg->get (''key''));
$test_value = ''something'';
$reg->set(''key'', $test_value);
$this->assertReference($test_value, $reg->get(''key''));
}
}

实现代码如下所示:

class RegistryGlobal {
var php设计模式介绍之注册模式 - 凌众科技

快速业务通道

php设计模式介绍之注册模式

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-05-22
content

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号

store = array();
function isValid($key) {
return array_key_exists($key, $this- >_store);
}
function &get($key) {
if (array_key_exists($key, $this- >_store))
return $this->_store[$key];
}
function set($key, &$obj) {
$this->_store[$key] =& $obj;
}
}

isValid(), get(),和 set()方法与我们前面开发的注册模式类完全相同。

下一步:我们来编写验证RegistryGlobal类 是单件模式的测试用例。

代码:

class RegistryGlobalPHP4TestCase extends UnitTestCase {
function testRegistryGlobal() { /*...*/ }
function testRegistryGlobalIsMonoState() {
$reg =& new RegistryGlobal;
$reg2 =& new RegistryGlobal;
$this->assertCopy($reg, $reg2);
$test_value = ''something'';
$reg->set(''test'', $test_value);
$this- >assertReference(
$reg->get(''test'')
,$reg2->get (''test''));
}
}

这里测试用例创建了RegistryGlobal类的两个实例 ,并确认他们不是对同一对象的引用——在一个实例内设置一个对象的属性值(value),最 后证实两个实例返回相同的对象。若测试通过RegistryGlobal类就拥有单态的行为。

代码:

define(''REGISTRY_GLOBAL_STORE'', ''__registry_global_store_key__'');
class RegistryGlobal
{var php设计模式介绍之注册模式 - 凌众科技

快速业务通道

php设计模式介绍之注册模式

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-05-22
content

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号

store;
function RegistryGlobal()
{if
(!array_key_exists(REGISTRY_GLOBAL_STORE, $GLOBALS)||!is_array($GLOBALS[REGISTRY_GLOBAL_STORE])) {$GLOBALS[REGISTRY_GLOBAL_STORE] = array();
}
$this->_store =& $GLOBALS[REGISTRY_GLOBAL_STORE];
}
function isValid($key)
{return array_key_exists($key, $this->_store);}
function &get($key)
{if (array_key_exists($key, $this->_store)) return $this ->_store[$key];}
function set($key, &$obj) {
$this->_store[$key] =& $obj;
}
}

本方法中的神奇之处在于$this->_store =& $GLOBALS [REGISTRY_GLOBAL_STORE;] 这一行,引用操作符将全局数组绑定到实例变量 php设计模式介绍之注册模式 - 凌众科技

快速业务通道

php设计模式介绍之注册模式

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-05-22
content

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号

store上。这是单件模式 实现的关键所在:每次在对象中使用$this->_store变量时,作用反映到全局变量中。

但是并 不推荐基于全局变量的解决方案。如果PHP4支持这一特性的话,静态类变量会是更好的解决方案。然而 ,我们可以在代码中通过引用实现静态类变量吗?

测试与 RegistryGlobal 类的测试相似。

代码:

class RegistryMonoStatePHP4TestCase extends UnitTestCase {
function testRegistryMonoState() {
$this->assertCopy(
$reg =& new  RegistryMonoState;
$reg2 =& new RegistryMonoState);
$this->assertFalse ($reg->isValid(‘key’));
$this->assertNull($reg->get (‘key’));
$test_value = ‘something’;
$reg->set (‘key’, $test_value);
$this

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号