Iterator 介面擴充了抽象的Traversable介面。 PHP提供了許多內建的迭代器(稱為SPL迭代器)用於許多常見功能。例如ArrayIterator,DirectoryIterator等。實作Iterator介面的使用者類別應該實作其中定義的抽象方法。
Iterator extends Traversable { /* Methods */ abstract public current ( void ) : mixed abstract public key ( void ) : scalar abstract public next ( void ) : void abstract public rewind ( void ) : void abstract public valid ( void ) : bool }
Iterator::current — 傳回目前元素
Iterator::key — 傳回目前元素的鍵
#Iterator::next — 移動到下一個元素
Iterator::rewind — 將迭代器倒回第一個元素
Iterator::valid — 檢查目前位置是否有效
在實作IteratorAggregate 或Iterator 介面時,必須在implements 子句中將它們列在其名稱之前。
在下面的PHP腳本中,一個實作了介面的類別包含一個私有變數作為陣列。透過實作迭代器的抽象方法,我們可以使用 foreach 迴圈和 next() 方法來遍歷陣列。
<?php class myIterator implements Iterator { private $index = 0; private $arr = array(10,20,30,40); public function __construct() { $this->index = 0; } public function rewind() { $this->index = 0; } public function current() { return $this->arr[$this->index]; } public function key() { return $this->index; } public function next() { ++$this->index; } public function valid() { return isset($this->arr[$this->index]); } } ?>
使用foreach循環,我們可以迭代MyIterator物件的陣列屬性
$it = new myIterator(); foreach($it as $key => $value) { echo "$key=>". $value ."</p><p>"; }
迭代也可以透過在while循環中呼叫next()方法來執行。在開始循環之前,請確保rewind迭代器。
$it->rewind(); do { echo $it->key() . "=>" .$it->current() . "</p><p>"; $it->next(); } while ($it->valid());
在兩種情況下,對陣列屬性的遍歷顯示下列結果
0=>10 1=>20 2=>30 3=>40
以上是PHP Iterable介面的詳細內容。更多資訊請關注PHP中文網其他相關文章!