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中文网其他相关文章!