PHP Iterable 接口
phpserver side programmingprogramming更新于 2025/8/19 5:07:17
简介
Iterator 接口扩展了抽象的 Traversable 接口。PHP 为许多常规功能提供了许多内置迭代器(称为 SPL 迭代器)。例如 ArrayIterator、DirectoryIterator 等。实现 Iterator 接口的用户类应该实现接口中定义的抽象方法。
语法
Iterator extends Traversable {
/* 方法 */
abstract public current ( void ) : hybrid
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 或扩展了 Traversable 的 Iterator 接口时,必须在 implements 子句中将其列在其名称之前。
Iterator 示例
在以下 PHP 脚本中,实现接口的类包含一个数组作为私有变量。通过实现 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 对象的数组属性
$it = new myIterator();
foreach($it as $key => $value) {
echo "$key=>". $value ."
";
}
也可以通过在 while 循环中调用 next() 方法执行迭代。请确保在开始循环之前 rewind 迭代器
示例
$it->rewind();
do {
echo $it->key() . "=>" .$it->current() . "
";
$it->next();
}
while ($it->valid());
输出
两次遍历数组属性均显示以下结果
0=>10 1=>20 2=>30 3=>40

