要使用迭代器就要先实现Iterator接口,该接口有以下五个方法:
- Iterator::current — 返回当前元素
- Iterator::key — 返回当前元素的键
- Iterator::next — 向前移动到下一个元素
- Iterator::rewind — 返回到迭代器的第一个元素
- Iterator::valid — 检查当前位置是否有效
实现该接口的类必须实现这五个方法
<?php
/**
* php迭代器的使用
*/
class MyIterator implements Iterator
{
private $var = array();
public function __construct($array)
{
if (is_array($array)) {
$this->var = $array;
}
}
public function rewind() {
echo "倒回第一个元素\n";
reset($this->var);
}
public function current() {
$var = current($this->var);
echo "当前元素: $var\n";
return $var;
}
public function key() {
$var = key($this->var);
echo "当前元素的键: $var\n";
return $var;
}
public function next() {
$var = next($this->var);
echo "移向下一个元素: $var\n";
return $var;
}
public function valid() {
$var = $this->current() !== false;
echo "检查有效性: {$var}\n";
return $var;
}
}
$values = array('one','two','three');
$it = new MyIterator($values);
foreach ($it as $k => $v) {
print "此时键值对 -- key $k: value $v\n\n";
}
以下是程序执行结果:
倒回第一个元素 | |
当前元素: one | |
检查有效性: 1 | |
当前元素: one | |
当前元素的键: 0 | |
此时键值对 -- key 0: value one | |
移向下一个元素: two | |
当前元素: two | |
检查有效性: 1 | |
当前元素: two | |
当前元素的键: 1 | |
此时键值对 -- key 1: value two | |
移向下一个元素: three | |
当前元素: three | |
检查有效性: 1 | |
当前元素: three | |
当前元素的键: 2 | |
此时键值对 -- key 2: value three | |
移向下一个元素: | |
当前元素: | |
检查有效性: |
从上面的结果中很容易看出foreach循环的时候都调用了那些方法了吧