快速业务通道

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

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-05-22
->assertReference($reg->get (‘key’), $reg2->get(‘key’));
}
}

要自己 实现类静态变量,可以将一个对函数静态变量的引用绑定到类的实例变量上。

代码:

class RegistryMonoState {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 &_initRegistry() { static $store = array(); return $store;
}
function RegistryMonoState() {
$this->_store =& $this->_initRegistry();
}
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;
}
}

initRegistry()方法包含一个初始化为数组的静 态变量。这个静态变量通过引用返回。在构造函数中 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实例变量被赋于通过initRegistry()函数返 回的引用——即静态数组。好!一个PHP4的类静态变量产生了。

使用类静态变量的实 现:

PHP5中,没有必要自己实现类静态变量,因为PHP5直接支持类静态变量。因此,PHP5简化了 实现。而且,PHP5中引用、对象不再有PHP4中的意义,但是assertReference() 处理了这种差别,如果 两个变量指向同一个对象句柄也可以通过测试。

以下是为PHP5改写的类似的ReGIStry测试用例。

代码:

// PHP5

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

以下是PHP5版本的使用静态类变量的 Registry类。

代码:

class RegistryMonoState {
protected static  $store = array();
function isValid($key) {
return array_key_exists($key,  RegistryMonoState::$store);
}
function get($key) {
if (array_key_exists ($key, RegistryMonoState::$store))
return RegistryMonoState::$store[$key];
}
function set($key, $obj) {
RegistryMonoState::$store[$key] = $obj;
}
}

PHP5中用这种方式编码Registry类的一个有趣的效果是你可以用相同的代码使用实例 或者静态方法。以下是证明仅仅使用静态方法的测试用例。

代码:

class  RegistryMonoStatePHP5TestCase extends UnitTestCase {
function  testRegistryMonoState() { /*...*/ }
function testRegistryMonoStateStaticCalls()  {
$this->assertFalse(RegistryMonoState::isValid(‘key’));
$this- >assertNull(RegistryMonoState::get(‘key’));
$test_value = new  TestObj; RegistryMonoState::set(‘key’, $test_value);
$this- >assertIdentical($test_value, RegistryMonoState::get(‘key’));
}

现在你已经看到在PHP5中的静态调用接口,下面让我们在PHP4中实现相同的接口。在前 面的PHP4“静态类变量”部分,实现需要使用“函数静态变量返回引用”来跟踪 。PHP4版本的静态调用接口测试与PHP5版本的测试类似。

代码:

//  PHP4

class RegistryStaticPHP4TestCase extends UnitTestCase {
function  testRegistryStatic() {
$this->assertFalse(Reg

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站: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号