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的原有机制,而是调用类中实现的抽象方法来完成遍历。