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

php教程:php设计模式介绍之装饰器模式(5)

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

本篇关键词:模式装饰教程介绍
黑客防线网安网讯:  WebjxCom提示:php教程:php设计模式介绍之装饰器模式.    装饰器的一个优点是你可以将他们串在一起(使用)。Invalid装饰器仅仅知道:它正在包装一个组件:它不必关心组件是否是一...
  WebjxCom提示:php教程:php设计模式介绍之装饰器模式.
  
  装饰器的一个优点是你可以将他们串在一起(使用)Invalid装饰器仅仅知道:它正在包装一个组件:它不必关心组件是否是一个TextInput,Select,或者是一个有标签的被装饰版本的组件
  
  这导致了下一个合理的测试用例:
  
  classWidgetTestCaseextendsUnitTestCase{
  
  //...
  
  functiontestInvalidLabeled(){
  
  $text=&newInvalid(
  
  newLabeled(
  
  ‘Email’
  
  ,newTextInput(‘email’)));
  
  $output=$text->paint();
  
  $this->assertWantedPattern(‘~<b>Email:</b><input~i’,$output);
  
  $this->assertWantedPattern(
  
  ‘~^<spanclass=”invalid”>.*</span>$~i’,$output);
  
  }
  
  }
  
  有了Invalid装饰器我们来处理FormHandler::validate()方法:
  
  classFormHandlerTestCaseextendsUnitTestCase{
  
  //...
  
  functiontestValidateMissingName(){
  
  $post=&newPost;
  
  $post->set(‘fname’,‘Jason’);
  
  $post->set(‘email’,‘jsweat_php@yahoo.com’);
  
  $form=FormHandler::build($post);
  
  $this->assertFalse(FormHandler::validate($form,$post));
  
  $this->assertNoUnwantedPattern(‘/invalid/i’,$form[0]->paint());
  
  $this->assertWantedPattern(‘/invalid/i’,$form[1]->paint());
  
  $this->assertNoUnwantedPattern(‘/invalid/i’,$form[2]->paint());
  
  }
  
  }
  
  这个测试捕获(包含)了所有的基本方面:建立一个Post实例的存根使用它建立一个组件集合,然后将集合传送给validate方法。
  
  classFormHandler{
  
  functionvalidate(&$form,&$post){
  
  //firstnamerequired
  
  if(!strlen($post->get(‘fname’))){
  
  $form[0]=&newInvalid($form[0]);
  
  }
  
  212TheDecoratorPattern
  
  //lastnamerequired
  
  if(!strlen($post->get(‘lname’))){
  
  $form[1]=&newInvalid($form[1]);
  
  }
  
  }
  
  }
  
  不协调的代码
  
  当我看这段代码时,我发现了两个不协调之处:通过数字索引访问表单元素,需要传递$_post数组。给validation方法。在以后的重构中,最好是创建一个组件集合用一个以表单元素名字索引的关联数组表示或者用一个Registry模式作为更合理的一步。你也可以给类Widget增加一个方法返回它的
  
  当前数值,取消需要传递$_Post实例给Widget集合的构造函数。所有这些都超出了这个例子目的的范围。
  
  为了验证目的,我们继续增加一个简单的正则方法(regex)来验证email地址:
  
  classFormHandlerTestCaseextendsUnitTestCase{
  
  //...
  
  functiontestValidateBadEmail(){
  
  $post=&newPost;
  
  $post->set(‘fname’,‘Jason’);
  
  $post->set(‘lname’,‘Sweat’);
  
  $post->set(‘email’,‘jsweat_phpATyahooDOTcom’);
  
  $form=FormHandler::build($post);
  
  $this->assertFalse(FormHandler::validate($form,$post));
  
  $this->assertNoUnwantedPattern(‘/invalid/i’,$form[0]->paint());
  
  $this->assertNoUnwantedPattern(‘/invalid/i’,$form[1]->paint());
  
  $this->assertWantedPattern(‘/invalid/i’,$form[2]->paint());
  
  }
  
  }
  
  实现这个简单的email验证的代码如下:
  
  classFormHandler{
  
  functionvalidate(&$form,&$post){
  
  //firstnamerequired
  
  if(!strlen($post->get(‘fname’))){
  
  $form[0]=&newInvalid($form[0]);
  
  }
  
  //lastnamerequired
  
  if(!strlen($post->get(‘lname’))){
  
  $form[1]=&newInvalid($form[1]);
  
  }
  
  //emailhastolookreal
  
  if(!preg_match(‘~w+@(w+.)+w+~’
  
  ,$post->get(‘email’))){
  
  $form[2]=&newInvalid($form[2]);
  
  }
  
  }
  
  }
  
  
    黑客防线网安服务器维护方案本篇连接:http://www.rongsen.com.cn/show-17400-1.html
网站维护教程更新时间:2012-09-21 05:18:14  【打印此页】  【关闭
我要申请本站N点 | 黑客防线官网 |  
专业服务器维护及网站维护手工安全搭建环境,网站安全加固服务。黑客防线网安服务器维护基地招商进行中!QQ:29769479

footer  footer  footer  footer