首页  韩国资源  酷站加油  我的展厅  设计名站  古典元素  推荐下载  设计欣赏  每周专访  招募精英  人才专区  网页教程  平面设计  编程开发  设计竞赛
当前位置:首页 > 编程开发 > PHP教程 > 正文
php设计模式介绍之注册模式
来源:phpchina 作者:HRTSEA 2008年07月07日 10:48 网友评论:0条 点击:

使用类静态变量的实现

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(RegistryStatic::isValid(‘key’));
$this->assertNull(RegistryStatic::get(‘key’));
$test_value  =  ‘something’; RegistryStatic::set(‘key’,  $test_value);
$this->assertReference($test_value,  RegistryStatic::get(‘key’));
}
}

以下是符合测试要求的代码实现。

代码:

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

这个实现方法的重点是getRegistry()方法返回一个对静态数组的引用。

$store  =&  RegistryStatic::_getRegistry();这一行,在随后的函数中把变量$store通过引用赋给静态数组,允许所有的函数可以静态访问数组,允许所有的方法可以被静态调用。

也可以不使用PHP4“静态类变量跟踪”达到相同的效果:将原先的基于单件模式的Registry类与一个包装类结合以达到允许静态调用。这个类与testRegistryStatic()有相同的测试代码,但是他的实现如下所示:

代码:

class  RegistryStatic  {
function  isValid($key)  {
$reg  =&  Registry::getInstance();
return  $reg->isValid($key);
}
function  &get($key)  {
$reg  =&  Registry::getInstance();
return  $reg->get($key);
}
function  set($key,  &$obj)  {
$reg  =&  Registry::getInstance();
$reg->set($key,  $obj);
}
}

首页 上一页 [1] [2] [3] [4] [5] [6] [7] 下一页 尾页
上一篇:php设计模式介绍之伪对象模式   下一篇:php设计模式介绍之单件模式
收藏此页】【打印】【关闭
 相关文章  我要点评
·PHP服务器变量设置的方法
·php编程常用技巧四则
·PHP安装问题
·PHP在Web开发领域的优势
·PHP生成动态WAP页面
·PHP网站基础优化方法
·Php基础知识了解
·Apache与PHP的整合过程

免责声明:本站刊载此文不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。对本文有任何异议,请联络:68design#163.com
转载要求:作者及来源信息必需保留。转载之图片、文件,链接请不要盗链到本站,且不准打上各自站点的水印。



关于我们 | 在线反馈 | 广告报价 | 友情链接 | 联系我们 | 免责声明 | 在线投稿 | 网站地图
Copyright © 2003-2007 68design.net, All Rights Reserve 【找网页设计师,当然上网页设计师联盟】