任何人都可以解释什么是对象迭代以及此代码的工作原理?
class MyIterator implements Iterator{
private $var = array();
public function __construct($array){
if (is_array($array)) {
$this->var = $array;
}
}
public function rewind() {
echo "rewinding
";
reset($this->var);
}
public function key() {
$var = key($this->var);
echo "key: $var
";
return $var;
}
public function next() {
$var = next($this->var);
echo "next: $var
";
return $var;
}
public function valid() {
$var = $this->current() !== false;
echo "valid: {$var}
";
return $var;
}
public function current() {
$var = current($this->var);
echo "current: $var
";
return $var;
}
}
$values = array(1,2,3);
$it = new MyIterator($values);
foreach ($it as $a => $b) {
print "$a: $b
";
}
答案 0 :(得分:2)
Iterator接口可能受到Java Iterators的启发。它提供了一个通用接口,可以使用foreach
构造继续迭代项列表。
您的代码定义了一个实现此接口的类。它基本上提供了与本机支持的数组相同的功能,但添加了一些echo语句。
为什么要使用迭代器?
Iterator的优点是它提供了一个高级抽象接口,因此调用它的代码不需要担心发生了什么。同时,它允许您以块的形式处理大型数据源(从数据库中获取行,从文件中读取行),而无需一次将所有内容加载到内存中。