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

php教程:php设计模式介绍之迭代器模式(8)

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

本篇关键词:模式介绍教程this->
黑客防线网安网讯:  WebjxCom提示:php教程:php设计模式介绍之迭代器模式.    测试类    现在,代码更加复杂了,但是其如何支持其它迭代器类型?添加一个关于“发行版”迭代器的测试,来查看这种设...
  WebjxCom提示:php教程:php设计模式介绍之迭代器模式.
  
  测试类
  
  现在代码更加复杂了但是其如何支持其它迭代器类型?添加一个关于“发行版”迭代器的测试,来查看这种设计的其它迭代器如何工作
  
  classPolySplIteratorTestCaseextendsUnitTestCase{
  
  //...
  
  functionTestReleasedForeach(){
  
  $this->lib->add(newMedia(‘second’,1999));
  
  $this->lib->add(newMedia(‘first’,1989));
  
  $output=array();
  
  $this->lib->iteratorType(‘Released’);
  
  foreach($this->libas$item){
  
  $output[]=$item->name.’-’.$item->year;
  
  }
  
  $this->assertEqual(
  
  ‘first-1989second-1999name1-2000name3-2001name2-2002’
  
  ,implode(‘‘,$output));
  
  }
  
  }
  
  上面的测试用例看起来也很熟悉,因为其非常类似于前一个“发行版”迭代器,但是使用了foreach控制结构进行循环
  
  classPolymorphicForeachableLibrary
  
  extendsLibraryimplementsIterator{
  
  protected$iterator_type;
  
  protected$iterator;
  
  function__construct(){
  
  $this->iteratorType();
  
  }
  
  functioniteratorType($type=false){
  
  switch(strtolower($type)){
  
  case‘released’:
  
  $this->iterator_type=‘ReleasedLibraryIterator’;
  
  break;
  
  default:
  
  $this->iterator_type=‘StandardLibraryIterator’;
  
  }
  
  $this->rewind();
  
  }
  
  //...
  
  functionrewind(){
  
  $type=$this->iterator_type;
  
  $this->iterator=new$type($this->collection);
  
  $this->iterator->rewind();
  
  }
  
  }
  
  新的iteratorType()方法使你转变要使用的迭代器的类型。(因为迭代器类型并不是在对象安装期间选中的,并且你可以在空闲时再次调用iteratorType()方法来选择不同迭代器类型,所以实际上是在State模式执行代码,而不是Strategy模式。)
  
  classReleasedLibraryIterator
  
  extendsStandardLibraryIterator{
  
  function__construct($collection){
  
  usort($collection
  
  ,create_function(‘$a,$b’,’return($a->year-$b->year);’));
  
  $this->collection=$collection;
  
  }
  
  }
  
  你可以简单地通过扩展StandardLibraryIterator并覆盖构造函数来添加入局数组的排序,从而实现ReleasedLibraryIterator。并且,通过它,你可以有一个workingPolymorphicForeachableLibrary。
  
  总结
  
  迭代器是标准化地地处理应用程序中对象集合的方法。这些例子是基于数组的,但是对于拥有同一个接口的非数组集合,工作起来将更加强大。使用foreach控制结构方式的集合确实非常酷。SPL实现中最不幸的问题是与迭代器可能存在的名称空间冲突。有多少PHP4面向对象的代码拥有类似于迭代器类作为库迭代器类的基类?在一些容量中有多少5种必需方法的定义?可能一个更加具有深刻含义的名称就能实现Foreachable。如果你选择使用SPL,则还应该研究其它支持的迭代器,例如RecursiveArrayIterator和其它众多迭代器。
  
  
    黑客防线网安服务器维护方案本篇连接:http://www.rongsen.com.cn/show-17429-1.html
网站维护教程更新时间:2012-09-21 05:18:49  【打印此页】  【关闭
我要申请本站N点 | 黑客防线官网 |  
专业服务器维护及网站维护手工安全搭建环境,网站安全加固服务。黑客防线网安服务器维护基地招商进行中!QQ:29769479

footer  footer  footer  footer