实现迭代器

前言

迭代器接口可以让对象像数组一样被遍历,如 foreach ,和数组的区别是数组一开始数据就是填充好的,也就是已经加载到内存的,如果数据量比较大甚至超过服务器内存,那将无法工作,而迭代器就可以通过一条一条数据的读取(从文件或数据库)进行操作

Iterator接口

php提供的接口,我们看一下要实现的内容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
Iterator extends Traversable {
//重置索引游标
abstract public void rewind ( void )
//移动当前索引游标到下一元素
abstract public void next ( void )
//判断当前索引游标指向的元素是否有效
abstract public boolean valid ( void )
//返回当前索引游标指向的元素
abstract public mixed current ( void )
//返回当前索引游标指向的键
abstract public scalar key ( void )
}
```
<!--more-->
## 实现一个简单的迭代器
```php
class myIterator implements Iterator {
// 记录数组的位置
private $position = 0;
// 要遍历的数组
private $array = array(
"firstelement",
"secondelement",
"lastelement",
);
// foreach开始时执行一次,重置索引
function rewind() {
var_dump(__METHOD__);
$this->position = 0;
}
// 返回下一个索引
function next() {
var_dump(__METHOD__);
++$this->position;
}
// 判断当前索引对应的值是否有效,返回false将会终止遍历
function valid() {
var_dump(__METHOD__);
return isset($this->array[$this->position]);
}
// 每次循环获取当前索引对应的值
function current() {
var_dump(__METHOD__);
return $this->array[$this->position];
}
// 返回当前的索引
function key() {
var_dump(__METHOD__);
return $this->position;
}
}
$it = new myIterator;
foreach($it as $key => $value) {
var_dump($key, $value);
echo "\n";
}

PHP文档

echo-ding wechat
欢迎您扫一扫上面的微信公众号,订阅我的博客!
坚持原创技术分享,您的支持将鼓励我继续创作!