学科分类
目录
PHP基础

Iterator迭代器

在上一节进行对象遍历时,foreach语句受访问修饰限定符的影响,不能访问类中所有属性。因此,我们可以借助Iterator迭代器来实现,通过循环来得到或删除对象中的某个元素。

Iterator迭代器是PHP内置的能够修改foreach内部运行机制的接口,它内置了5个抽象方法,实现迭代器类必须实现5个抽象方法,实现迭代器的类的对象在进行foreach遍历时,不会按照foreach原有的机制处理,而是根据迭代器的抽象方法运行。

Iterator迭代器内置的5个抽象方法如下所示。

  • Iterator::current() 返回当前元素
  • Iterator::key() 返回当前元素的键
  • Iterator::nex() 向前移动到下一个元素
  • Iterator::rewind() 返回到迭代器的第一个元素
  • Iterator::valid() 检查当前位置是否有效

接下来演示如何使用迭代器,具体代码如下所示。

1  class Man implements Iterator
2  {
3    private $info = ['name' => '', 'age' => 0];
4    public function current()
5    {
6      return current($this->info);
7    }
8    public function key()
9    {
10     return key($this->info);
11   }
12   public function next()
13   {
14     next($this->info);
15   }
16   public function rewind()
17   {
18     reset($this->info);
19   }
20   public function valid()
21   {
22     return isset($this->info[key($this->info)]);
23   }
24 }
25 $man = new Man();
26 // 输出结果:
27 // name:
28 // age:0
29 foreach ($man as $key => $val) {
30   echo $key . ':' . $val . '<br/>';
31 }

上述代码中,Man类实现了Iterator迭代器,Man类中定义了私有属性$info,并且实现了迭代器中的抽象方法。在使用foreach进行遍历时,不再使用foreach的原有机制,而是调用类中实现的抽象方法来完成遍历。

点击此处
隐藏目录