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

相关文章