
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 — 移动到下一个元素
立即学习“PHP免费学习笔记(深入)”;
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中文网其它相关文章!
PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号