PHP Iterable接口
介绍
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倒退到第一个元素
Iterator::valid—检查当前位置是否有效
当实现扩展Traversable的IteratorAggregate或Iterator接口时,必须在Implements子句中在其名称之前列出它们。
迭代器示例
在下面的PHP脚本中,实现Interface的类包含一个数组作为私有变量。实现Iterator的抽象方法,我们可以使用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对象的array属性
$it = new myIterator();
foreach($it as $key => $value) {
   echo "$key=>". $value ."\n";
}还可以通过在while循环中附加next()方法来执行迭代。确保在开始循环之前倒回迭代器
示例
$it->rewind();
do {
   echo $it->key() . "=>" .$it->current() . "\n";
   $it->next();
}
while ($it->valid());输出结果
在两种情况下,遍历数组属性都显示以下结果
0=>10 1=>20 2=>30 3=>40