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

php教程:php设计模式介绍之策略模式(2)

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

本篇关键词:模式策略教程介绍
黑客防线网安网讯:  例子    举例子说明,让我们做一个存储PHP参数的cache。这个cahce类需要把变量以PHP识别的方式写入到一个文件当中,所以你可以在以后加载该文件并使用它。这个类还应该可以让你为每...
  例子
  
  举例子说明让我们做一个存储PHP参数的cache这个cahce类需要把变量以PHP识别的方式写入到一个文件当中所以你可以在以后加载该文件并使用它这个类还应该可以让你为每个数据加个标识符和存储的方式。
  
  数据缓存
  
  注:缓存是为了在接下来的操作中继续使用而对资源进行缓存。你可以通过建立和使用缓存来节省直接从原数据库获取数据的时间。这方面的例子最常见的就是访问数据库或者解析大的XML文档,或者大的配置文件。
  
  缓存也会出现一个问题:你的缓存可能会失去与原数据的同步。或者缓存需要使用太多内存。
  
  最开始,我们开发一个缓存操作,并不使用策略模式。
  
  因为你可能需要缓存的不止一个值,所以你需要使用标识符来标识出你需要指定的元素。在这个例子中,标识符就是’application_config’。下面试一个如果使用cache的例子。
  
  //PHP4
  
  $config_cache=&newVarCache(‘application_config’);
  
  if($config_cache->isValid()){
  
  $config=$config_cache->get();
  
  }else{
  
  $config=slow_expensive_function_to_get_config();
  
  $config_cache->set($config);
  
  }
  
  这个代码生成了一个新的VarCache对象存放在$config_cache变量里面。这个数据在缓存中的标识符是‘application_config’。如果在缓存里面有这个数据,isValid()将返回真(true)并且获取缓存中的数据。反之,值被重新获取并写入缓存当中,以便下次使用。
  
  按照一般的需求,让我们开始编写这段代码来进行测试。首先,如果缓存中没有该数据,isValid()方式函数应该返回非值(false)。
  
  classVarCacheTestCaseextendsUnitTestCase{
  
  functionTestUnsetValueIsInvalid(){
  
  $cache=&newVarCache(‘foo’);
  
  $this->assertFalse($cache->isValid());
  
  }
  
  因为VarCache现在没有代码,所以最简单的方式就是先构造一个方式函数。
  
  classVarCache{
  
  functionisValid(){}
  
  }
  
  这样,我们就可以继续了。
  
  classVarCacheTestCaseextendsUnitTestCase{
  
  functionTestUnsetValueIsInvalid(){/*...*/}
  
  functionTestIsValidTrueAfterSet(){
  
  $cache=&newVarCache(‘foo’);
  
  $cache->set(‘bar’);
  
  $this->assertTrue($cache->isValid());
  
  }
  
  上面的测试校验了缓存的数据是否是可用的。
  
  开始编写cache类的主要部分。VarCache引入一个标识符,所以constructor了一个应该记录它的对象实例。这里面还有一个set()的方式函数,用来把数据存入缓存,或者当数据存在时,修改缓存当中的数据。
  
  classVarCache{
  
  var$_name;
  
  functionVarCache($name){
  
  $this->_name=‘cache/’.$name;
  
  }
  
  functionisValid(){
  
  returnfile_exists($this->_name.’.php’);
  
  }
  
  functionset(){
  
  $file_handle=fopen($this->_name.’.php’,‘w’);
  
  fclose($file_handle);
  
  }
  
  }
  
  对象实例的参数$_name存放了缓存的标识符。在这个简单的操作中,$_name被用来生成文件名(在实际的使用可能会数据库或者其它的数据源代替)set()使用fopen()和fclose()来“访问”基于$_name的文件。当调用set()后,file_exists()在VarCache::isValid()里面调用返回真(true)。
  
  运行这个测试来产生一个我们预期的结果;但是实际情况是报错!为什么呢?第一次运新的时候没有生成文件,所以第二次运行的时候找不到文件,显然我们不希望这种情况出现。我们期望的是每一次运行代码都是互不影响的。
  
  幸运的是,把总体测试框架和特定功能的简单测试结合起来,我们就可以得到灵活的测试环境,并且在以后的测试中方便地使用。UnitTestCase::setUp()实现框架的初始化,而UnitTestCase::tearDown()实现具体的测试过程。
  
  
    黑客防线网安服务器维护方案本篇连接:http://www.rongsen.com.cn/show-17431-1.html
网站维护教程更新时间:2012-09-21 05:18:49  【打印此页】  【关闭
我要申请本站N点 | 黑客防线官网 |  
专业服务器维护及网站维护手工安全搭建环境,网站安全加固服务。黑客防线网安服务器维护基地招商进行中!QQ:29769479

footer  footer  footer  footer