php教程:php设计模式介绍之注册模式_PHP技巧_黑客防线网安服务器维护基地--Powered by WWW.RONGSEN.COM.CN

php教程:php设计模式介绍之注册模式

作者:黑客防线网安PHP教程基地 来源:黑客防线网安PHP教程基地 浏览次数:0

本篇关键词:模式注册教程介绍
黑客防线网安网讯:  我们通常认为避免使用全局变量是一种好的选择,因此,对象经常被作为参数从一段代码传递到另一段。但是传递实例的一个问题就是对象有时候不知道将要传递给谁——?经过一个函数后才被传递...
  我们通常认为避免使用全局变量是一种好的选择,因此对象经常被作为参数从一段代码传递到另一段但是传递实例的一个问题就是对象有时候不知道将要传递给谁——?经过一个函数后才被传递到真正需要这个对象的函数
  
  为了编写阅读,修改代码的方便,最好能够减少不同对象的数量,并且能够将大量广泛使用的对象统一表示为一个单一,常用的对象。
  
  问题:
  
  你如何通过单一的全局的对象来获取对其它对象的引用?
  
  解决方案:
  
  “注册模式”就像“对象的电话簿”——储存并且能够取回对对象引用的登记簿。(注:PHP中的“联合数组”也起到了类似“电话簿”的功能。事实上,“注册模式”就是围绕PHP中强大的数组完成的。)“注册模式”的一些特性经常被包含在“单一模式”中(参见第四章),使得“注册模式”成为你整个应用信息的决定性来源。
  
  注释:“注册模式”类主要参考了MartinFowlerdescribes用java语言实现的PatternsofEnterpriseApplicationArchitecture(企业应用程序体系结构模型)。MarcusBaker谢了一篇详细的PHP中应用“注册模式”的文章。该文章可在PHPPatterns.com的站点获的(http://www.PHPpatterns.com/index.PHP/article/articleview/75/1/1/)。Baker也涉及了一些测试considerations,示范了测试驱动的开发方法。
  
  样本代码:
  
  正如MartinFlower在他的“注册模式”一文中提及的样本代码所示,你可以用各种方法,提供各种接口实现“注册模式”。让我们仔细探究这种想法,并建立PHP4中的“注册模式”的一些不同实现。
  
  让我们以编写能储存并恢复对象实例并能对“注册模式”提供全局访问的代码开始。这个类的实例变量能够缓存对象,并且“注册模式”本身是一个“单一模式”。像以前一样,测试决定需求。我们的第一个测试要确定“注册模式”是一个“单件模式”类。
  
  //PHP4
  
  classRegistryPHP4TestCaseextendsUnitTestCase{
  
  functiontestRegistryIsSingleton(){
  
  $this->assertIsA($reg=&Registry::getInstance(),‘Registry’);
  
  $this->assertReference($reg,Registry::getInstance());
  
  }
  
  }
  
  这里,要把你在以前几章“单件模式”中学到的知识用上,你应该能够很快写出能够通过该测试的类。以下是一个满足测试要求的“注册模式”类(ignoringthecoderequiredtoenforcenodirectobjectcreation):
  
  classRegistry{
  
  function&getInstance(){
  
  static$instance=array();
  
  if(!$instance)$instance[0]=&newRegistry;
  
  return$instance[0];
  
  }
  
  }
  
  一个简单的静态数组就足够记录这个单一实例了。
  
  接下来,让我们转到“注册模式”独特的特性上面。一个“注册模式”应该提供get()和set()方法来存储和取得对象(用一些属性key)而且也应该提供一个isValid()方法来确定一个给定的属性是否已经设置。
  
  这三个方法的一个简单实现在接下来讨论。这里是两个isValid():方法的测试方法。
  
  代码:
  
  classRegistryPHP4TestCaseextendsUnitTestCase
  
  {functiontestRegistryIsSingleton(){/*...*/}
  
  functiontestEmptyRegistryKeyIsInvalid()
  
  {$reg=&Registry::getInstance();
  
  $this->assertFalse($reg->isValid('key'));
  
  }
  
  functiontestEmptyRegistryKeyReturnsNull()
  
  {$reg=&Registry::getInstance();
  
  $this->assertNull($reg->get('key'));
  
  }
  
  }
  
  作者注:assertFalse()
  
  assertFalse()仅仅是assertTrue()的反面,如果第一个参数预期是PHP中的布尔值false,测试通过。
  
  
    黑客防线网安服务器维护方案本篇连接:http://www.rongsen.com.cn/show-17437-1.html
网站维护教程更新时间:2012-09-21 05:19:00  【打印此页】  【关闭
我要申请本站N点 | 黑客防线官网 |  
专业服务器维护及网站维护手工安全搭建环境,网站安全加固服务。黑客防线网安服务器维护基地招商进行中!QQ:29769479

footer  footer  footer  footer