亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 語言 > PHP > 正文

PHP設計模式之PHP迭代器模式講解

2024-05-05 00:07:48
字體:
來源:轉載
供稿:網友

迭代器有時又稱光標(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.

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

PHP,設計模式,迭代器

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

  • 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 檢查當前位置的有效性

而對于ZEND_ITER_OBJECT的類對象,則會通過調用對象實現的Iterator接口相關函數來進行foreach。

<?php/*** Iterator模式的簡單實現類*/class sample implements Iterator {  private $_items ;  public function __construct(&$data) {    $this->_items = $data;  }  public function current() {    return current($this->_items);  }  public function next() {    next($this->_items);    }  public function key() {    return key($this->_items);  }  public function rewind() {    reset($this->_items);  }  public function valid() {                                           return ($this->current() !== FALSE);  }}/** DEMO */$data = array(1, 2, 3, 4, 5);$sa = new sample($data);foreach ($sa AS $key => $row) {  echo $key, ' ', $row, '<br />';}?>

舉幾個迭代器的使用范圍:

使用返回迭代器的包或庫時(如PHP5中的SPL迭代器)
無法在一次的調用獲取容器的所有元素時
要處理數量巨大的無素時(數據庫中的表以GB計的數據)
……

不同的迭代器有不同的接口,例如PHP SPL迭代器中包括Next()(移動到下一個元素),corrent()(返回當前元素),valid()(檢查迭代結尾),rewind()(從頭重新開始),key()(返回當前元素的索引)。當然你可以自己寫適合自己用的迭代器,也可以用系統中的迭代器。

一般是使用foreach來使用迭代器,下面整理了一下代碼:

<?php  class sample implements Iterator{  private $_items = array(1,2,3,4,5,6,7);  public function __construct() {         ;//void  }  public function rewind() { reset($this->_items); }  public function current() { return current($this->_items); }  public function key() { return key($this->_items); }  public function next() { return next($this->_items); }  public function valid() { return ( $this->current() !== false ); }}$sa = new sample();foreach($sa as $key => $val){  print $key . "=>" .$val;}?> 

while循環也可以:

<?phpwhile ($itertor->valid()){ //判斷是不是最后元素 $element=$itertor->current(); //獲取當前元素 $itertor->next(); //移動到下一個元素}?>

為什么要學習PHP的迭代器呢?有個很重要的原因:利用PHP的迭代器可以利用面向對象實現常見的數據結構,例如列表,堆棧,隊列與圖。后面會做一個專題,用PHP實現大部分的數據結構,而且以面向對象的形式。所以這里先預熱了一下PHP的迭代器。

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對VeVb武林網的支持。


注:相關教程知識閱讀請移步到PHP教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲免费伊人电影在线观看av| 热久久这里只有精品| 欧美激情中文字幕在线| 欧美www视频在线观看| 日韩av成人在线| 国产免费一区二区三区香蕉精| 欧美在线观看网址综合| 欧美人在线视频| 久久久久中文字幕2018| 亚洲国产精品久久久久秋霞蜜臀| 91丝袜美腿美女视频网站| 日韩在线免费视频| 成人免费视频a| 国产精品劲爆视频| 在线视频精品一| 18久久久久久| 懂色av影视一区二区三区| 日韩视频免费大全中文字幕| 日韩在线观看视频免费| 欧美激情性做爰免费视频| 亚洲精品国产精品国产自| 久久久亚洲精品视频| 91视频国产精品| 色吧影院999| 91免费高清视频| 国产精品一区二区3区| 亚洲国产91精品在线观看| 久久久精品在线| 亚洲国产精品成人一区二区| 成人精品久久av网站| 69久久夜色精品国产69乱青草| 久久久亚洲精品视频| 欧美老女人性视频| 亚洲精品成人网| 色偷偷av亚洲男人的天堂| 国产成人拍精品视频午夜网站| 欧美午夜www高清视频| 成人在线视频福利| 中文一区二区视频| 日韩在线观看免费高清| 久久亚洲国产成人| 日韩精品免费视频| 久久精品一偷一偷国产| 成人激情综合网| 国产一区二区精品丝袜| 91中文字幕在线| 成人国产精品av| 国产精品免费电影| 俺去亚洲欧洲欧美日韩| 中文字幕日韩精品在线观看| 亚洲一区二区三| 国产亚洲精品久久久久久牛牛| 国语自产精品视频在线看抢先版图片| 国产一区二区三区在线看| 成人午夜在线视频一区| 国产精品亚洲网站| 91av视频导航| 欧美高清在线观看| 欧美成人午夜剧场免费观看| 日韩欧美在线第一页| 中文字幕亚洲综合久久筱田步美| 欧美成人免费一级人片100| 51久久精品夜色国产麻豆| 久久久欧美精品| 日韩在线视频线视频免费网站| 欧美国产精品va在线观看| 亚洲国产美女精品久久久久∴| 九九热最新视频//这里只有精品| 91探花福利精品国产自产在线| 亚洲黄色片网站| 国产精品电影网| 国产丝袜一区二区三区| 精品日本高清在线播放| 日韩视频中文字幕| 一区二区三区精品99久久| 久久免费少妇高潮久久精品99| 久久成人精品视频| 日韩精品www| 欧美小视频在线观看| 国产亚洲在线播放| 午夜精品一区二区三区在线| 国产成人一区二区三区小说| 欧美另类高清videos| 97在线免费视频| 国产成人在线一区| 国产精品爽爽爽| 亚洲精品97久久| 麻豆一区二区在线观看| 成人观看高清在线观看免费| 91成人在线观看国产| 夜夜嗨av色一区二区不卡| 另类美女黄大片| 91日韩在线视频| 精品久久中文字幕| 日韩高清av一区二区三区| 国产精品第七十二页| 亚洲bt欧美bt日本bt| 国产精品久久久久久中文字| 国产成人+综合亚洲+天堂| 亚洲电影成人av99爱色| 在线视频欧美日韩| 精品国产一区二区三区久久久狼| 欧美午夜影院在线视频| 国产精品女主播视频| 4444欧美成人kkkk| 国产日韩欧美中文| 亚洲国产中文字幕在线观看| 欧美黄色性视频| 欧美在线视频免费| 日本成人在线视频网址| 日韩欧美国产黄色| 国产91精品久久久久| 久久久久久av| 91网站在线免费观看| 在线观看不卡av| 美女精品视频一区| 日韩精品视频在线观看网址| 最近中文字幕日韩精品| 日韩精品在线观看一区| 亚洲精品二三区| 亚洲美女喷白浆| 国色天香2019中文字幕在线观看| 欧美重口另类videos人妖| 久久免费精品日本久久中文字幕| 青青草原成人在线视频| 成人精品在线观看| 国产精品男人爽免费视频1| 久久精品视频在线播放| 久久久久一本一区二区青青蜜月| 亚洲www视频| 亚洲乱码一区av黑人高潮| 欧美性猛交xxxx乱大交蜜桃| 欧美激情精品久久久久久变态| 欧美日韩中国免费专区在线看| 91亚洲午夜在线| 欧美电影免费观看电视剧大全| 2021国产精品视频| 亚洲人成电影网站色| 久久久亚洲国产天美传媒修理工| 亚洲jizzjizz日本少妇| 日韩精品免费在线播放| 日日骚av一区| 亚洲美女又黄又爽在线观看| 欧美天堂在线观看| 欧美视频裸体精品| 欧美丰满少妇xxxxx| 久久久www成人免费精品| 亚洲一区免费网站| 亚洲欧美国产日韩中文字幕| 精品国产一区二区三区久久狼5月| 欧美日韩在线观看视频| 91亚洲精品视频| 一区二区三区动漫| 欧美激情中文字幕在线| 欧美一区二区三区艳史| 久久亚洲一区二区三区四区五区高| 国产精品久久久久国产a级| 在线视频精品一| 国产z一区二区三区| 国产激情久久久久| 黑人欧美xxxx| 国产精品美女在线| 亚洲国产精品福利| 91久久久久久久久|