欢迎来到天天文库
浏览记录
ID:24964558
大小:77.12 KB
页数:3页
时间:2018-11-15
《php设计模式介绍之迭代器模式》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、类中的面向对象编程封装应用逻辑。类,就是实例化的对象,每个单独的对象都有一个特定的身份和状态。单独的对象是一种组织代码的有用方法,但通常你会处理一组对象或者集合。属性来自SQL查询的一组数据就是一个集合,就像本书前曲章节介绍的Monopoly游戏示例的对象列表。集合不一定是均一的。图形用户界面框架屮的Window对象可以收集任意数量的控制对象一Menu、Slider和Button。并且,集合的实现可以有多种方式:PHP数字是一个集合,但也是一个散列表,一个链接列表,一个堆栈以及队列。问题如何操纵任意的对象集合?解决
2、方案使用迭代器模式来提供对集合内容的统一存取。你可能没有意识到这一点,但你每天都在使用迭代器模式一它潜藏在PHP的数组类型和各种数组操作函数中。(其实,给你一些固有类的数组的组合和一群用这些固有类工作的可变函数,你将不得不使用这些数组来处理对象集合。这是在PHP中的本地数组迭代:$test=arrayfone','two','three');$output=〃;reset($test);do{$output.=current($test);}while(next($test));echo$output;//prod
3、uces'onetwothree'reset()函数将迭代重新转到数组的开始;current()返回当前元素的值;next()则前进至数组中的下一个元素并返回新的currentG值。当你超岀数组的最后一个元素时,next()返冋false。使用这些迭代方法,PHP数组的内部实现就与你不相关了。迭代器结合了封装和多态的面向对象程序设计原理。使用迭代器,你可以对集合中的对象进行操作,而无需专门了解集合如何显现或者集合包含什么(对象的种类)。迭代器提供了不同固定迭代实现的统一接口,它完全包含了如何操纵特定集合的详细信息,
4、伍括显示哪些项(过滤)及其显示顺序(排序)。让我们创建•-个简单的对象,在数组中对它进行操作。(尽管该示例在PHP5环境下,但迭代器并不特定于PHP5。虽然添加丫较多的引用操作符,本章节屮的大多数示例在PHP4下也能够运行)。对象Lendable表示诸如电影、相册等媒体,它作为Web站点的一部分或服务,允许用户浏览或将他们的媒体集合分享给其他用户。(对于该示例,请无需考虑其他方面。)让我们开始下面对Lendable基础设计的测试。//PHP5classLendableTestCaseextendsUnitTestC
5、ase{functionTestCheckout(){$item=newLendable;$this->assertFalse($item->borrower);$item->checkout(/John,);$this->assertEqual(/borrowed,,$item-〉status);$this->assertEqual(/John,/$item->borrower);}functionTestCheckin(){$item=newLendable;$item->checkout(/John,);$i
6、tem-〉checkin();$this->assertEqual(1ibrary,,$item->status);$this->assertFalse($item->borrower);}}要实现这一最初测试的需求,我们来创建一个带有若干公共属性和一些方法的类,来触发这些属性的值:classLendable{public$status=library';public$borrower=〃;publicfunctioncheckout($borrower){$this->status='borrowed’;$thi
7、s-〉borrower=$borrower;}publicfunctioncheckin(){$this->status=library';$this-〉borrower=";}}Lendable是一个好的,晋通的开端。让我们将它扩展到诸如DVD或CD的磁道项。媒体扩展了Lendable,并且磁道详细记录了特定媒体的详细信息,包括项S的名称,发布的年份以及项本身的类型:classMediaextendsLendable{public$name;public$type;public$year;publicfuncti
8、on_construct($name,$year,$type=,dvd,){$this-〉name=$name;$this->type=$type;$this->year=(int)$year;}}要使事情更加简单,媒体有三个公共的实例变量,Media::name,Media::year和Media::type。构造函数采用了两个参数,将第一个存储在$nam
此文档下载收益归作者所有