欧美阿v视频在线大全_亚洲欧美中文日韩V在线观看_www性欧美日韩欧美91_亚洲欧美日韩久久精品

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

PHP設計模式之迭代器(Iterator)模式入門與應用詳解

熱門標簽:騰訊外呼管理系統 揚州地圖標注app 青島語音外呼系統招商 岳陽外呼型呼叫中心系統在哪里 昭通辦理400電話 山西探意電話機器人 河南電銷卡外呼系統哪家強 山西回撥外呼系統 百應電話機器人服務

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

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

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

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

咋樣,反正我現在是一頭霧水。。。

再來看下迭代器需要用到的內部方法:

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

咱不廢話哈,直接來看下網上比較經典的一個實例:

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 "當前元素: $var\n";
     return $var;
   }
 
   public function key() {
    $var = key($this->var);
     echo "當前元素的鍵: $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";
}

運行之后的結果如下:

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

來看下迭代器的優點:

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

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

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

4.為不同的集合結構提供一個統一的接口,從而支持同樣的算法在不同的集合結構上操作

缺點就是迭代器模式將存儲數據和遍歷數據的職責分離增加新的集合對象時需要增加對應的迭代器類,類的個數成對增加,在一定程度上增加系統復雜度。

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

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

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

3.為遍歷不同的聚合結構提供一個統一的接口

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

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

完事,我們如果要進行遍歷的類必須實現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";
}

最后,咱們來看一個網上找的用迭代器模式來實現的一個斐波那契數列。

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

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() {
    // 關鍵在這里
    // 將當前值保存到 $newprevious
    $newprevious = $this->current;
    // 將上一個值與當前值的和賦給當前值
    $this->current += $this->previous;
    // 前一個當前值賦給上一個值
    $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;
}

輸出的結果如下:

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

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

更多關于PHP相關內容感興趣的讀者可查看本站專題:《php面向對象程序設計入門教程》、《PHP數組(Array)操作技巧大全》、《PHP基本語法入門教程》、《PHP運算與運算符用法總結》、《php字符串(string)用法總結》、《php+mysql數據庫操作入門教程》及《php常見數據庫操作技巧匯總》

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

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

標簽:黃南 寶雞 湛江 銅川 南陽 鎮江 婁底 宜賓

巨人網絡通訊聲明:本文標題《PHP設計模式之迭代器(Iterator)模式入門與應用詳解》,本文關鍵詞  PHP,設計模式,之,迭代,器,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《PHP設計模式之迭代器(Iterator)模式入門與應用詳解》相關的同類信息!
  • 本頁收集關于PHP設計模式之迭代器(Iterator)模式入門與應用詳解的相關信息資訊供網民參考!
  • 推薦文章
    欧美阿v视频在线大全_亚洲欧美中文日韩V在线观看_www性欧美日韩欧美91_亚洲欧美日韩久久精品
  • <rt id="w000q"><acronym id="w000q"></acronym></rt>
  • <abbr id="w000q"></abbr>
    <rt id="w000q"></rt>
    日韩欧美资源站| 欧美日韩一卡二卡| 欧美不卡视频一区| 亚洲成精国产精品女| 波多野结衣在线一区| 欧美xxxooo| 久久精品视频免费| 黄色小说综合网站| 一区二区三区在线观看免费视频| 精品国产一区二区三区不卡| 奇米影视一区二区三区| 亚洲AV无码国产精品| 欧美一级搡bbbb搡bbbb| 日韩高清不卡一区二区三区| 女同性恋一区二区三区| 欧美一级欧美三级在线观看| 日韩av网站免费在线| 3d动漫精品啪啪一区二区下载| 久久伊人中文字幕| 欧美美女性生活视频| 精品国产乱码久久久久久久久| 久久国产人妖系列| 人人妻人人澡人人爽| 国产三级精品视频| 国产成人精品网址| 一本色道久久综合狠狠躁的推荐| 亚洲日本乱码在线观看| 免费黄色在线播放| 91精品国产aⅴ一区二区| 美女尤物国产一区| 女教师淫辱の教室蜜臀av软件| 中文字幕成人网| 99久久国产免费看| 欧美群妇大交群中文字幕| 日韩成人午夜精品| 日本一二三不卡视频| 中文字幕在线不卡一区| 91丨porny丨九色| 91精品国产一区二区三区香蕉| 欧美aⅴ一区二区三区视频| 亚洲精品国产一区黑色丝袜| 亚洲国产精品激情在线观看| 99久久久免费精品国产一区二区| 欧美日韩国产综合视频在线观看| 日韩国产在线一| 美国美女黄色片| 亚洲色图欧美在线| 欧美夫妇交换xxx| 久久久精品欧美丰满| av综合在线播放| 91精品久久久久久久91蜜桃| 黄色资源网久久资源365| 色美美综合视频| 日韩成人免费在线| 欧美性x x x| 亚洲高清免费在线| 免费一级黄色录像| 亚洲最大成人网4388xx| 野外性满足hd| 成人欧美一区二区三区白人| 人妻体内射精一区二区三区| 久久综合色一综合色88| 97se亚洲国产综合在线| 欧美xingq一区二区| 成人污污视频在线观看| 91麻豆精品国产| 成人一区在线看| 日韩一区二区三区电影在线观看| 国产成a人亚洲精| 7777精品伊人久久久大香线蕉经典版下载| 蜜桃精品视频在线观看| 色网综合在线观看| 蜜臀va亚洲va欧美va天堂| 一本一本久久a久久精品综合麻豆| 三级一区在线视频先锋 | 日本欧美一区二区三区不卡视频| 亚洲欧美一区二区不卡| 欧美熟妇一区二区| 亚洲欧美日韩在线不卡| 一级黄色片网址| 亚洲高清免费视频| 少妇被躁爽到高潮无码文| 美女尤物国产一区| 精品视频一区三区九区| 国产成人亚洲综合a∨猫咪 | 97se亚洲国产综合自在线不卡 | 欧美zozozo| 国产伦精品一区二区三区妓女下载| 精品成人一区二区三区四区| 91亚洲大成网污www| 久久精品男人的天堂| 国产精品扒开腿做爽爽爽a片唱戏 亚洲av成人精品一区二区三区 | 欧美日韩视频在线第一区| 国产白丝网站精品污在线入口| 日韩一区二区视频| 日本在线视频播放| 国产精品国产自产拍高清av王其 | 亚洲男女在线观看| 亚洲女子a中天字幕| 五月天免费网站| 青青青爽久久午夜综合久久午夜| 欧美在线观看一区| 成人影视亚洲图片在线| 国产欧美综合在线观看第十页| 人妻丰满熟妇aⅴ无码| 午夜天堂影视香蕉久久| 在线观看国产91| 成人免费视频一区| 国产欧美日本一区二区三区| 蜜臀久久99精品久久久久久| 日韩国产欧美在线观看| 欧美高清视频www夜色资源网| 99久久国产综合精品女不卡| 中文字幕一区二区在线播放| 色婷婷粉嫩av| 国产精品一卡二卡在线观看| 26uuu久久综合| 谁有免费的黄色网址| 蜜臀av一区二区在线观看| 欧美一区二区三区四区高清| 无码国产精品一区二区免费式直播| 一区二区三区在线免费| 在线一区二区三区四区| 99国产精品久久久久| 一区二区三区精品视频| 日本黄色动态图| 日韩国产高清在线| 91麻豆精品国产91久久久久| 黄色录像a级片| 日本欧美韩国一区三区| 日韩午夜小视频| 亚洲国产欧美视频| 男女性色大片免费观看一区二区| 欧美一区二区啪啪| 不卡一区二区在线观看| 久久国产精品无码网站| 亚洲精品一区二区三区99| 一色道久久88加勒比一| 韩国av一区二区三区在线观看| 久久人人爽人人爽| 成人黄色短视频| 粗大黑人巨茎大战欧美成人| 中文字幕综合网| 欧美性生活大片视频| 欧美午夜精品一区二区| 天天色天天爱天天射综合| 日韩一区二区三区视频在线观看| 国产成人无码精品久久二区三| 激情偷乱视频一区二区三区| 日本一区二区综合亚洲| 9.1人成人免费视频网站| 国产又黄又嫩又滑又白| 午夜精品久久久久久久| 精品久久久久一区| 国产91在线播放九色| 99精品视频免费在线观看| 亚洲电影激情视频网站| 日韩视频免费观看高清完整版| 97人妻人人揉人人躁人人| 成熟亚洲日本毛茸茸凸凹| 亚洲乱码国产乱码精品精的特点 | 久久99久久久久| 国产日韩欧美高清在线| 色偷偷久久一区二区三区| 韩国黄色一级片| 久草热8精品视频在线观看| 国产精品久久久久永久免费观看 | 亚洲久本草在线中文字幕| 91麻豆精品国产91| 成人午夜免费影院| 91网站最新网址| 蜜臀av性久久久久蜜臀aⅴ流畅| 久久久影视传媒| 在线精品视频一区二区| 久久中文字幕人妻| 成人视屏免费看| 日韩vs国产vs欧美| 国产精品美女一区二区| 欧美精品v国产精品v日韩精品 | 亚洲与欧洲av电影| 欧美成人a∨高清免费观看| 在线观看xxx| 亚洲av综合一区二区| bt欧美亚洲午夜电影天堂| 日韩av中文字幕一区二区| 国产精品丝袜一区| 91精品在线麻豆| 五月综合色婷婷| 中文字幕天堂av| 国产激情偷乱视频一区二区三区| 亚洲午夜精品在线| 欧美国产乱子伦| 91精品国产综合久久福利| 精品欧美一区二区久久久久| 无码精品一区二区三区在线播放| 国产成人精品综合在线观看| 日韩精彩视频在线观看| √…a在线天堂一区| 337p粉嫩大胆噜噜噜噜噜91av| 欧美中文字幕久久|