快速业务通道

php设计模式介绍之策略模式

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-05-22
ction  VarCache($name) { /* ... */ } function isValid() { /* ... */ } function get()  {
if ($this->isValid()) {
return file_get_contents($this- >_name.’.php’);
}
}
function set($value) {
$file_handle = fopen($this->_name.’.php’, ‘w’); fwrite ($file_handle,$value); fclose($file_handle);
}
}

128

The Strategy Pattern

通过黑体字部分的代码,VarCache::set() 方式函数把参数$value的内容写到 文件中,并用VarCache::get() 方式函数通过file_get_content() 从文件中把内容读取出来.

从 目前的执行情况来看,对于字符串和数字的操作是没有问题的,但是对于更复杂的参数比如数组和对象 ,执行起来就会出现问题了。我们用下面的代码进行处理:

class VarCacheTestCase  extends UnitTestCase {
// ...
function TestStringFailsForArray() {
$test_val = array(‘one’,’two’);
$cache =& new  VarCache(‘foo’);
$cache->set($test_val);
$this->assertError (‘Array to string conversion’);
$this->assertNotEqual($test_val,  $cache->get());
$this->assertEqual(‘array’,strtolower($cache- >get()));
}

由于篇幅的关系,我们直接调到这个执行过程的结束部分,它随后 也将实现策略式的判断。

这里就是增加一系列操作用来完善VarCache的地方。

class VarCache {
//...
function get() {
if ($this- >isValid()) {
include $this->_name.’.php’;
return  $cached_content;
}
//...
}

在这里关键性的改变是get() 方式函数( 并且让PHP去验证有效性。

同时,get()返回参数$cached_content的值,所以无论set() 如果操作 ,它必须设置这个变量!

因此,对于数字来说,执行出来是什么样的结果呢?

class VarCache {
//...
function set($value) {
$file_handle  = fopen($this->_name.’.php’, ‘w’);
$template =  ‘<?php $cached_content = %s;’;
$content = sprintf($template
The Strategy Pattern    129
,(float)$value);
fwrite($file_handle,  $content);
fclose($file_handle);
}
}

看起来对于一个数字,执行起 来是没有问题的,那么对于字符串如何呢?对于字符串,缓存文件的数据编写方式就必须用=  ‘%s’;结尾而不是= %s;。所以在这里我们需要引入一个“type” 参数:它用 来指定缓存的数据类型是一个整型还是字符串。为了更容易地增加更多的数据类型,我们分别在set()和 _getTemplate()函数增加一个case 判断。

class VarCache {
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号

name;
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号

type;
function VarCache($name, $type=’string’) {
$this- >_name = ‘cache/’.$name;
$this->_type = $type;
}
//  ...
function _getTemplate() {
$template = ‘<?php $cached_content  = ‘;
switch ($this->_type) {
case ‘string’:
$template .= “‘%s’;”;
break;
case  ‘numeric’:
$template .= ‘%s;’;
break;
default:
trigger_error(‘invalid cache type’);
}
return $template;
}
function set($value) {
$file_handle = fopen($this- >_name.’.php’, ‘w’);
switch ($this->_type) {
case ‘string’:
$content = sprintf($this->_g

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