中文字幕二区_国产精品免费在线观看_黄色网站观看_人人草人人澡_日本真实娇小xxxx

您的位置: 首頁 > 技術(shù)文檔 > 網(wǎng)絡(luò)編程 > php設(shè)計(jì)模式介紹之迭代器模式
一個(gè)月的php學(xué)習(xí)總結(jié) 回到列表 php設(shè)計(jì)模式介紹之策略模式
 php設(shè)計(jì)模式介紹之迭代器模式

作者:bmli 時(shí)間: 2008-07-26 文檔類型:合作網(wǎng)站提供 來自:phpchina

第 1 頁 php設(shè)計(jì)模式介紹之迭代器模式 [1]
第 2 頁 php設(shè)計(jì)模式介紹之迭代器模式 [2]
第 3 頁 php設(shè)計(jì)模式介紹之迭代器模式 [3]
第 4 頁 php設(shè)計(jì)模式介紹之迭代器模式 [4]
第 5 頁 php設(shè)計(jì)模式介紹之迭代器模式 [5]
第 6 頁 php設(shè)計(jì)模式介紹之迭代器模式 [6]
第 7 頁 php設(shè)計(jì)模式介紹之迭代器模式 [7]
第 8 頁 php設(shè)計(jì)模式介紹之迭代器模式 [8]

上文:《PHP設(shè)計(jì)模式介紹》第七章 策略模式

《PHP設(shè)計(jì)模式介紹》第八章 迭代器模式

 類中的面向?qū)ο缶幊谭庋b應(yīng)用邏輯。類,就是實(shí)例化的對(duì)象,每個(gè)單獨(dú)的對(duì)象都有一個(gè)特定的身份和狀態(tài)。單獨(dú)的對(duì)象是一種組織代碼的有用方法,但通常你會(huì)處理一組對(duì)象或者集合。

屬性來自 SQL 查詢的一組數(shù)據(jù)就是一個(gè)集合,就像本書前面章節(jié)介紹的 Monopoly 游戲示例的對(duì)象列表。

集合不一定是均一的。圖形用戶界面框架中的 Window 對(duì)象可以收集任意數(shù)量的控制對(duì)象 - Menu、Slider 和 Button。并且,集合的實(shí)現(xiàn)可以有多種方式:PHP 數(shù)字是一個(gè)集合,但也是一個(gè)散列表,一個(gè)鏈接列表,一個(gè)堆棧以及隊(duì)列。

問題

如何操縱任意的對(duì)象集合?

解決方案

使用迭代器模式來提供對(duì)集合內(nèi)容的統(tǒng)一存取。

你可能沒有意識(shí)到這一點(diǎn),但你每天都在使用迭代器模式 - 它潛藏在 PHP 的數(shù)組類型和各種數(shù)組操作函數(shù)中。(其實(shí),給你一些固有類的數(shù)組的組合和一群用這些固有類工作的可變函數(shù),你將不得不使用這些數(shù)組來處理對(duì)象集合。這是在 PHP 中的本地?cái)?shù)組迭代:

$test  =  array(‘one’,  ‘two’,  ‘three’);
$output  =  ‘’; reset($test);
do  {
$output  .=  current($test);
}  while  (next($test));
echo  $output;  //  produces  ‘onetwothree’

reset() 函數(shù)將迭代重新轉(zhuǎn)到數(shù)組的開始;current() 返回當(dāng)前元素的值;next() 則前進(jìn)至數(shù)組中的下一個(gè)元素并返回新的 current() 值。當(dāng)你超出數(shù)組的最后一個(gè)元素時(shí),next() 返回 false。使用這些迭代方法,PHP 數(shù)組的內(nèi)部實(shí)現(xiàn)就與你不相關(guān)了。迭代器結(jié)合了封裝和多態(tài)的面向?qū)ο蟪绦蛟O(shè)計(jì)原理。使用迭代器,你可以對(duì)集合中的對(duì)象進(jìn)行操作,而無需專門了解集合如何顯現(xiàn)或者集合包含什么(對(duì)象的種類)。迭代器提供了不同固定迭代實(shí)現(xiàn)的統(tǒng)一接口,它完全包含了如何操縱特定集合的詳細(xì)信息,包括顯示哪些項(xiàng)(過濾)及其顯示順序(排序)。

讓我們創(chuàng)建一個(gè)簡(jiǎn)單的對(duì)象,在數(shù)組中對(duì)它進(jìn)行操作。(盡管該示例在 PHP5 環(huán)境下,但迭代器并不特定于 PHP5。雖然添加了較多的引用操作符,本章節(jié)中的大多數(shù)示例在 PHP4 下也能夠運(yùn)行)。對(duì)象 Lendable 表示諸如電影、相冊(cè)等媒體,它作為 web 站點(diǎn)的一部分或服務(wù),允許用戶瀏覽或?qū)⑺麄兊拿襟w集合分享給其他用戶。(對(duì)        于該示例,請(qǐng)無需考慮其他方面。)讓我們開始下面對(duì) Lendable 基礎(chǔ)設(shè)計(jì)的測(cè)試。

//  PHP5
class  LendableTestCase  extends  UnitTestCase  {
function  TestCheckout()  {
$item  =  new  Lendable;
$this->assertFalse($item->borrower);
$item->checkout(‘John’);
$this->assertEqual(‘borrowed’,  $item->status);
$this->assertEqual(‘John’,  $item->borrower);
}
function  TestCheckin()  {
$item  =  new  Lendable;
$item->checkout(‘John’);
$item->checkin();
$this->assertEqual(‘library’,  $item->status);
$this->assertFalse($item->borrower);
}
}

要實(shí)現(xiàn)這一最初測(cè)試的需求,我們來創(chuàng)建一個(gè)帶有若干公共屬性和一些方法的類,來觸發(fā)這些屬性的值:

class  Lendable  {
public  $status  =  ‘library’;
public  $borrower  =  ‘’;
public  function  checkout($borrower)  {
$this->status  =  ‘borrowed’;
$this->borrower  =  $borrower;
}
public  function  checkin()  {
$this->status  =  ‘library’;
$this->borrower  =  ‘’;
}
}

Lendable 是一個(gè)好的,普通的開端。讓我們將它擴(kuò)展到諸如 DVD 或 CD 的磁道項(xiàng)。媒體擴(kuò)展了 Lendable,并且磁道詳細(xì)記錄了特定媒體的詳細(xì)信息,包括項(xiàng)目的名稱,發(fā)布的年份以及項(xiàng)本身的類型:

class  Media  extends  Lendable  {
public  $name; public  $type; public  $year;
public  function  __construct($name,  $year,  $type=’dvd’ )  {
$this->name  =  $name;
$this->type  =  $type;
$this->year  =  (int)$year;
}
}

要使事情更加簡(jiǎn)單,媒體有三個(gè)公共的實(shí)例變量,Media::name,Media::year 和Media::type。構(gòu)造函數(shù)采用了兩個(gè)參數(shù),將第一個(gè)存儲(chǔ)在 $name 中,第二個(gè)存儲(chǔ)在 $year 中。構(gòu)造函數(shù)還允許可選的第三個(gè)參數(shù)來指定類型(缺省為dvd)。

給定單獨(dú)的對(duì)象來操作,你現(xiàn)在可以創(chuàng)建一個(gè)容器來包含他們:Library。類似于常用的庫,Library 應(yīng)該能夠添加,刪除和計(jì)算集合中的項(xiàng)。甚至,Library 還應(yīng)該允許訪問集合(本章中的樣本代碼部分可看到示例)中的單一的項(xiàng)(對(duì)象)。

我們開始構(gòu)建 Library 的測(cè)試用例。

class  LibraryTestCase  extends  UnitTestCase  {
function  TestCount()  {
$lib  =  new  Library;
$this->assertEqual(0,  $lib->count());
}
}

它是滿足這一測(cè)試的簡(jiǎn)單類:

class  Library  {
function  count()  {
return  0;
}
}

繼續(xù)將一些有趣的功能添加到測(cè)試中:

class  LibraryTestCase  extends  UnitTestCase  {
function  TestCount()  {  /*  ...  */  }
function  TestAdd()  {
$lib  =  new  Library;
$lib->add(‘one’);
$this->assertEqual(1,  $lib->count());
}
}

實(shí)現(xiàn) add() 的簡(jiǎn)單方法是建立在 PHP 靈活數(shù)組函數(shù)的基礎(chǔ)上:你可以將項(xiàng)添加到實(shí)例變量并使用 count() 來返回集合眾項(xiàng)的數(shù)量。

class  Library  {
protected  $collection  =  array();
function  count()  {
return  count($this->collection);
}
function  add($item)  {
$this->collection[]  =  $item;
}
}

Library 現(xiàn)在是一個(gè)集合,但它沒有提供檢索或操縱單一數(shù)組成員的方法。

出處:phpchina
責(zé)任編輯:bluehearts

上一頁 下一頁 php設(shè)計(jì)模式介紹之迭代器模式 [2]

◎進(jìn)入論壇網(wǎng)絡(luò)編程版塊參加討論

相關(guān)文章 更多相關(guān)鏈接
php設(shè)計(jì)模式介紹之觀測(cè)模式
一個(gè)月的php學(xué)習(xí)總結(jié)
php設(shè)計(jì)模式介紹之策略模式
php設(shè)計(jì)模式介紹之偽對(duì)象模式
php設(shè)計(jì)模式介紹之注冊(cè)模式
關(guān)鍵字搜索 常規(guī)搜索 推薦文檔
熱門搜索:CSS Fireworks 設(shè)計(jì)比賽 網(wǎng)頁制作 web標(biāo)準(zhǔn) 用戶體驗(yàn) UE photoshop Dreamweaver Studio8 Flash 手繪 CG
站點(diǎn)最新 站點(diǎn)最新列表
周大!熬•自然”設(shè)計(jì)大賽開啟
國(guó)際體驗(yàn)設(shè)計(jì)大會(huì)7月將在京舉行
中國(guó)國(guó)防科技信息中心標(biāo)志征集
云計(jì)算如何讓安全問題可控
云計(jì)算是多數(shù)企業(yè)唯一擁抱互聯(lián)網(wǎng)的機(jī)會(huì)
阿里行云
云手機(jī)年終巨獻(xiàn),送禮標(biāo)配299起
阿里巴巴CTO王堅(jiān)的"云和互聯(lián)網(wǎng)觀"
1499元買真八核 云OS雙蛋大促
首屆COCO桌面手機(jī)主題設(shè)計(jì)大賽
欄目最新 欄目最新列表
淺談JavaScript編程語言的編碼規(guī)范
如何在illustrator中繪制臺(tái)歷
Ps簡(jiǎn)單繪制一個(gè)可愛的鉛筆圖標(biāo)
數(shù)據(jù)同步算法研究
用ps作簡(jiǎn)單的作品展示頁面
CSS定位機(jī)制之一:普通流
25個(gè)最佳最閃亮的Eclipse開發(fā)項(xiàng)目
Illustrator中制作針線縫制文字效果
Photoshop制作印刷凹凸字體
VS2010中創(chuàng)建自定義SQL Rule
>> 分頁 首頁 前頁 后頁 尾頁 頁次:1/81個(gè)記錄/頁 轉(zhuǎn)到 頁 共8個(gè)記錄

藍(lán)色理想版權(quán)申明:除部分特別聲明不要轉(zhuǎn)載,或者授權(quán)我站獨(dú)家播發(fā)的文章外,大家可以自由轉(zhuǎn)載我站點(diǎn)的原創(chuàng)文章,但原作者和來自我站的鏈接必須保留(非我站原創(chuàng)的,按照原來自一節(jié),自行鏈接)。文章版權(quán)歸我站和作者共有。

轉(zhuǎn)載要求:轉(zhuǎn)載之圖片、文件,鏈接請(qǐng)不要盜鏈到本站,且不準(zhǔn)打上各自站點(diǎn)的水印,亦不能抹去我站點(diǎn)水印。

特別注意:本站所提供的攝影照片,插畫,設(shè)計(jì)作品,如需使用,請(qǐng)與原作者聯(lián)系,版權(quán)歸原作者所有,文章若有侵犯作者版權(quán),請(qǐng)與我們聯(lián)系,我們將立即刪除修改。

您的評(píng)論
用戶名:  口令:
說明:輸入正確的用戶名和密碼才能參與評(píng)論。如果您不是本站會(huì)員,你可以注冊(cè) 為本站會(huì)員。
注意:文章中的鏈接、內(nèi)容等需要修改的錯(cuò)誤,請(qǐng)用報(bào)告錯(cuò)誤,以利文檔及時(shí)修改。
不評(píng)分 1 2 3 4 5
注意:請(qǐng)不要在評(píng)論中含與內(nèi)容無關(guān)的廣告鏈接,違者封ID
請(qǐng)您注意:
·不良評(píng)論請(qǐng)用報(bào)告管理員,以利管理員及時(shí)刪除。
·尊重網(wǎng)上道德,遵守中華人民共和國(guó)的各項(xiàng)有關(guān)法律法規(guī)
·承擔(dān)一切因您的行為而直接或間接導(dǎo)致的民事或刑事法律責(zé)任
·本站評(píng)論管理人員有權(quán)保留或刪除其管轄評(píng)論中的任意內(nèi)容
·您在本站發(fā)表的作品,本站有權(quán)在網(wǎng)站內(nèi)轉(zhuǎn)載或引用
·參與本評(píng)論即表明您已經(jīng)閱讀并接受上述條款
推薦文檔 | 打印文檔 | 評(píng)論文檔 | 報(bào)告錯(cuò)誤  
專業(yè)書推薦 更多內(nèi)容
網(wǎng)站可用性測(cè)試及優(yōu)化指南
《寫給大家看的色彩書1》
《跟我去香港》
眾妙之門—網(wǎng)站UI 設(shè)計(jì)之道
《Flex 4.0 RIA開發(fā)寶典》
《贏在設(shè)計(jì)》
犀利開發(fā)—jQuery內(nèi)核詳解與實(shí)踐
作品集 更多內(nèi)容

雜⑦雜⑧ Gold NORMANA V2