婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > PHP設(shè)計模式之迭代器(Iterator)模式入門與應(yīng)用詳解

PHP設(shè)計模式之迭代器(Iterator)模式入門與應(yīng)用詳解

熱門標(biāo)簽:騰訊外呼管理系統(tǒng) 揚(yáng)州地圖標(biāo)注app 青島語音外呼系統(tǒng)招商 岳陽外呼型呼叫中心系統(tǒng)在哪里 昭通辦理400電話 山西探意電話機(jī)器人 河南電銷卡外呼系統(tǒng)哪家強(qiáng) 山西回?fù)芡夂粝到y(tǒng) 百應(yīng)電話機(jī)器人服務(wù)

本文實例講述了PHP設(shè)計模式之迭代器(Iterator)模式。分享給大家供大家參考,具體如下:

迭代器有時又稱光標(biāo)(cursor)是程式設(shè)計的軟件設(shè)計模式,可在容器物件(container,例如list或vector)上遍訪的接口,設(shè)計人員無需關(guān)心容器物件的內(nèi)容,現(xiàn)在呢,各種語言實作Iterator的方式皆不盡同,有些面向?qū)ο笳Z言像Java, C#, Python, Delphi都已將Iterator的特性內(nèi)建語言當(dāng)中,完美的跟語言整合,我們稱之隱式迭代器(implicit iterator),但像是C++語言本身就沒有Iterator的特色,但STL仍利用template實作了功能強(qiáng)大的iterator。

但是,PHP5開始支持了接口, 并且內(nèi)置了Iterator接口, 所以如果你定義了一個類,并實現(xiàn)了Iterator接口,那么你的這個類對象就是ZEND_ITER_OBJECT,否則就是ZEND_ITER_PLAIN_OBJECT。對于ZEND_ITER_PLAIN_OBJECT的類,foreach會通過HASH_OF獲取該對象的默認(rèn)屬性數(shù)組,然后對該數(shù)組進(jìn)行foreach,而對于ZEND_ITER_OBJECT的類對象,則會通過調(diào)用對象實現(xiàn)的Iterator接口相關(guān)函數(shù)來進(jìn)行foreach。

咱們什么也別說,先來看下迭代器的定義,那就是提供一種方法順序訪問一個聚合對象中各個元素,而又不暴露該對象的內(nèi)部顯示。它可幫助構(gòu)造特定的對象,那些對象能夠提供單一標(biāo)準(zhǔn)接口循環(huán)或迭代任何類型的可計數(shù)數(shù)據(jù)。來看下迭代器模式的結(jié)構(gòu)圖:

咋樣,反正我現(xiàn)在是一頭霧水。。。

再來看下迭代器需要用到的內(nèi)部方法:

  • Iterator::current — Return the current element 返回當(dāng)前元素
  • Iterator::key — Return the key of the current element 返回當(dāng)前元素的鍵
  • Iterator::next — Move forward to next element 移向下一個元素
  • Iterator::rewind — Rewind the Iterator to the first element 重新回到第一個元素
  • Iterator::valid — Checks if current position is valid 檢查當(dāng)前位置的有效性

咱不廢話哈,直接來看下網(wǎng)上比較經(jīng)典的一個實例:

class MyIterator implements Iterator
{
   private $var = array();
 
   public function __construct($array)
   {
     if (is_array($array)) {
      $this->var = $array;
     }
   }
 
   public function rewind() {
     echo "倒回第一個元素\n";
    reset($this->var);
   }
 
   public function current() {
    $var = current($this->var);
     echo "當(dāng)前元素: $var\n";
     return $var;
   }
 
   public function key() {
    $var = key($this->var);
     echo "當(dāng)前元素的鍵: $var\n";
     return $var;
   }
 
   public function next() {
    $var = next($this->var);
     echo "移向下一個元素: $var\n";
     return $var;
   }
 
 
   public function valid() {
    $var = $this->current() !== false;
     echo "檢查有效性: {$var}\n";
     return $var;
   }
}
 
 
$values = array(1,2,3);
$it = new MyIterator($values);
foreach ($it as $k => $v) {
   print "此時鍵值對 -- key $k: value $v\n\n";
}

運(yùn)行之后的結(jié)果如下:

我們可以想一下,如果把集合對象和對集合對象的操作放在一起,當(dāng)我們想換一種方式遍歷集合對象中元素時,就需要修改集合對象了,違背“單一職責(zé)原則”,而迭代器模式將數(shù)據(jù)結(jié)構(gòu)和數(shù)據(jù)結(jié)構(gòu)的算法分離開,兩者可獨立發(fā)展。

來看下迭代器的優(yōu)點:

1.支持多種遍歷方式。比如有序列表,我們根據(jù)需要提供正序遍歷、倒序遍歷兩種迭代器。用戶只需要得到我們的迭代器,就可以對集合執(zhí)行遍歷操作

2.簡化了聚合類。由于引入了迭代器,原有的集合對象不需要自行遍歷集合元素了

3.增加新的聚合類和迭代器類很方便,兩個維度上可各自獨立變化

4.為不同的集合結(jié)構(gòu)提供一個統(tǒng)一的接口,從而支持同樣的算法在不同的集合結(jié)構(gòu)上操作

缺點就是迭代器模式將存儲數(shù)據(jù)和遍歷數(shù)據(jù)的職責(zé)分離增加新的集合對象時需要增加對應(yīng)的迭代器類,類的個數(shù)成對增加,在一定程度上增加系統(tǒng)復(fù)雜度。

它的使用場景,我們可以參考如下幾點:

1.訪問一個聚合對象內(nèi)容而無須暴露它的內(nèi)部顯示

2.需要為聚合對象提供多種遍歷方式

3.為遍歷不同的聚合結(jié)構(gòu)提供一個統(tǒng)一的接口

我們要知道,最基本的迭代器接口是Iterator,來看下Iterator里面規(guī)范的方法:

Iterator extends Traversable {
  /* 方法 */
  abstract public mixed current ( void )//返回當(dāng)前元素
  abstract public scalar key ( void )//返回當(dāng)前元素的鍵
  abstract public void next ( void )//向前移動到下一個元素
  abstract public void rewind ( void )//返回到迭代器的第一個元素
  abstract public boolean valid ( void )//檢查當(dāng)前位置是否有效
}

完事,我們?nèi)绻M(jìn)行遍歷的類必須實現(xiàn)Iterator里面的抽象方法,如下:

class Season implements Iterator{
  private $position = 0;//指針指向0
  private $arr = array('春','夏','秋','冬');
  public function rewind(){
    return $this -> position = 0;
  }
  public function current(){
    return $this -> arr[$this -> position];
  }
  public function key(){
    return $this -> position;
  }
  public function next() {
    ++$this -> position;
  }
 
  public function valid() {
    return isset($this -> arr[$this -> position]);
  }
}
$obj = new Season;
foreach ($obj as $key => $value) {
  echo $key.':'.$value."\n";
}

最后,咱們來看一個網(wǎng)上找的用迭代器模式來實現(xiàn)的一個斐波那契數(shù)列。

我們都知道,斐波那契數(shù)列通常做法是用遞歸實現(xiàn),當(dāng)然還有其它的方法,咱們這里用PHP的迭代器來實現(xiàn)一個斐波納契數(shù)列,幾乎沒有什么難度,只是把類里的next()方法重寫了一次。注釋已經(jīng)寫到代碼中,也是相當(dāng)好理解的,如下:

class Fibonacci implements Iterator {
  private $previous = 1;
  private $current = 0;
  private $key = 0;
   
  public function current() {
    return $this->current;
  }
   
  public function key() {
    return $this->key;
  }
   
  public function next() {
    // 關(guān)鍵在這里
    // 將當(dāng)前值保存到 $newprevious
    $newprevious = $this->current;
    // 將上一個值與當(dāng)前值的和賦給當(dāng)前值
    $this->current += $this->previous;
    // 前一個當(dāng)前值賦給上一個值
    $this->previous = $newprevious;
    $this->key++;
  }
   
  public function rewind() {
    $this->previous = 1;
    $this->current = 0;
    $this->key = 0;
  }
   
  public function valid() {
    return true;
  }
}
 
$seq = new Fibonacci;
$i = 0;
foreach ($seq as $f) {
  echo "$f ";
  if ($i++ === 15) break;
}

輸出的結(jié)果如下:

0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610

好啦,本次記錄就到這里了。

更多關(guān)于PHP相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《php面向?qū)ο蟪绦蛟O(shè)計入門教程》、《PHP數(shù)組(Array)操作技巧大全》、《PHP基本語法入門教程》、《PHP運(yùn)算與運(yùn)算符用法總結(jié)》、《php字符串(string)用法總結(jié)》、《php+mysql數(shù)據(jù)庫操作入門教程》及《php常見數(shù)據(jù)庫操作技巧匯總》

希望本文所述對大家PHP程序設(shè)計有所幫助。

您可能感興趣的文章:
  • PHP之預(yù)定義接口詳解
  • PHP中預(yù)定義的6種接口介紹
  • PHP聚合式迭代器接口IteratorAggregate用法分析
  • PHP迭代器接口Iterator用法分析
  • PHP設(shè)計模式之迭代器模式Iterator實例分析【對象行為型】
  • PHP中的Iterator迭代對象屬性詳解
  • PHP使用DirectoryIterator顯示下拉文件列表的方法
  • php中通過DirectoryIterator刪除整個目錄的方法
  • PHP預(yù)定義接口——Iterator用法示例

標(biāo)簽:黃南 寶雞 湛江 銅川 南陽 鎮(zhèn)江 婁底 宜賓

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《PHP設(shè)計模式之迭代器(Iterator)模式入門與應(yīng)用詳解》,本文關(guān)鍵詞  PHP,設(shè)計模式,之,迭代,器,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《PHP設(shè)計模式之迭代器(Iterator)模式入門與應(yīng)用詳解》相關(guān)的同類信息!
  • 本頁收集關(guān)于PHP設(shè)計模式之迭代器(Iterator)模式入門與應(yīng)用詳解的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    欧美人妇做爰xxxⅹ性高电影| 欧美乱妇一区二区三区不卡视频| 日日摸夜夜添夜夜添国产精品| 精品三级av在线| 欧洲精品在线观看| av在线播放一区二区三区| 美女视频第一区二区三区免费观看网站| 一区在线播放视频| 国产亚洲欧美日韩俺去了| 日韩欧美www| 日韩你懂的在线播放| 亚洲精品国久久99热| 亚洲欧洲日韩在线| 精品一区二区免费| 国产一区二区三区在线观看免费视频 | 国产综合成人久久大片91| 美女看a上一区| 色香色香欲天天天影视综合网| 国产成人av资源| 国产成人免费在线| 日韩精品在线网站| 亚洲一区在线观看免费观看电影高清| 亚洲黄色av一区| 成人av资源站| 欧美日韩高清在线| 一区二区在线电影| 成人综合婷婷国产精品久久免费| gogo大胆日本视频一区| 久久综合久久综合亚洲| 国产午夜久久久久| 精品一区在线看| 日韩欧美综合在线| 国产精品三级av| 一区二区三区日韩欧美精品| 热久久一区二区| 成人午夜av影视| 久久久久久久综合色一本| 亚洲欧美国产高清| 男女视频一区二区| 欧美一区二区三区在线| 中文字幕免费不卡在线| 亚洲综合成人网| 欧美日韩一区不卡| 中文字幕不卡在线观看| 粉嫩嫩av羞羞动漫久久久| 欧美日韩mp4| 日产国产高清一区二区三区| 99视频有精品| 一区二区三区高清不卡| 欧美日韩久久久一区| 蜜臀av性久久久久蜜臀aⅴ流畅 | 亚洲自拍欧美精品| 欧美日韩午夜影院| 蜜桃视频一区二区| 国产情人综合久久777777| 天天免费综合色| www.色精品| 一区二区三区四区乱视频| 337p亚洲精品色噜噜噜| 自拍偷拍亚洲欧美日韩| 国产一区二区剧情av在线| 国产日韩欧美一区二区三区乱码| 成人高清在线视频| 亚洲国产精品天堂| 95精品视频在线| 欧美韩国日本不卡| 色综合天天在线| |精品福利一区二区三区| 欧美系列一区二区| 亚洲欧洲精品一区二区精品久久久| 91麻豆成人久久精品二区三区| 亚洲国产精品精华液ab| 在线观看欧美精品| 国内精品久久久久影院薰衣草| 国产精品久久久久天堂| 国产一区二区导航在线播放| ㊣最新国产の精品bt伙计久久| 在线观看亚洲专区| 国产成人av电影在线观看| 亚洲国产综合色| 国产日产欧产精品推荐色| 欧洲亚洲精品在线| 国产精品影视在线观看| 日本一区二区三区dvd视频在线| 一本高清dvd不卡在线观看 | 日韩av一级电影| 国产精品伦一区二区三级视频| 制服.丝袜.亚洲.另类.中文 | 久久久九九九九| 欧美日韩一区二区不卡| av男人天堂一区| 国产在线一区二区| 性感美女久久精品| 欧美tk—视频vk| 欧美视频三区在线播放| av中文字幕亚洲| 久久精品久久久精品美女| 久久亚洲二区三区| 911精品国产一区二区在线| 91视频一区二区| 福利视频网站一区二区三区| 久草在线在线精品观看| 婷婷综合久久一区二区三区| 亚洲激情五月婷婷| 亚洲人成在线播放网站岛国 | 欧洲人成人精品| 一本色道久久综合亚洲aⅴ蜜桃| 国产精品一卡二卡| 国产在线视视频有精品| 国内成人精品2018免费看| 男女男精品视频| 精品一区二区三区免费视频| 久久精品国产免费看久久精品| 免费在线观看一区二区三区| 天堂va蜜桃一区二区三区 | 色综合久久综合网欧美综合网| 99视频一区二区三区| 91性感美女视频| 色视频成人在线观看免| 欧洲一区二区三区免费视频| 欧美午夜影院一区| 欧美日韩国产高清一区二区| 欧美一级搡bbbb搡bbbb| 日韩一级高清毛片| 精品国产乱码久久久久久图片| 99久久久精品免费观看国产蜜| 成人免费的视频| 91视频你懂的| 4hu四虎永久在线影院成人| 日韩午夜在线观看| 久久―日本道色综合久久| 欧美韩国日本一区| 一区二区欧美精品| 日韩电影在线免费观看| 久久精品av麻豆的观看方式| 国产精品一级片| 色8久久人人97超碰香蕉987| 丁香亚洲综合激情啪啪综合| 成人av网在线| 欧美日韩国产影片| 久久久www成人免费毛片麻豆| 亚洲国产成人一区二区三区| 亚洲一区二区四区蜜桃| 精品伊人久久久久7777人| av中文一区二区三区| 欧美剧情电影在线观看完整版免费励志电影| 欧美一区二区女人| 国产精品美女视频| 亚洲午夜激情av| 国产九色sp调教91| 欧美调教femdomvk| www国产成人| 亚洲精品国产a久久久久久| 久久精品噜噜噜成人av农村| 色综合久久综合网97色综合| 欧美成人一区二区三区| 综合久久给合久久狠狠狠97色| 免费人成在线不卡| 91麻豆国产福利精品| 日韩精品一区二区三区视频| 综合av第一页| 国产91露脸合集magnet| 欧美人妇做爰xxxⅹ性高电影| 亚洲欧洲99久久| 国产乱码精品一区二区三| 在线免费亚洲电影| 国产精品女同互慰在线看| 日韩专区在线视频| 91色九色蝌蚪| 国产视频不卡一区| 蜜桃av噜噜一区| 欧美欧美午夜aⅴ在线观看| 中国色在线观看另类| 美女在线一区二区| 欧美日韩国产高清一区二区| 亚洲日本乱码在线观看| 国产精品一二二区| 欧美变态tickle挠乳网站| 亚洲成在线观看| 91福利小视频| 亚洲码国产岛国毛片在线| 国产精品乱人伦| 成人黄色片在线观看| 亚洲人成影院在线观看| 国产精品国产三级国产aⅴ中文 | 麻豆91在线观看| 欧美日本一道本| 亚洲欧美激情小说另类| 欧美性感一类影片在线播放| 亚洲女厕所小便bbb| av激情综合网| 亚洲免费观看在线观看| 91蜜桃视频在线| 国产精品妹子av| gogogo免费视频观看亚洲一| 中文字幕欧美日韩一区| 成人av电影在线网| 国产精品另类一区| www.亚洲在线| 亚洲午夜免费电影|