3

谁能解释什么是对象迭代以及这段代码是如何工作的?


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
"; }
4

1 回答 1

2

Iterator接口可能受到 Java Iterators 的启发。foreach它提供了一个通用接口来使用该构造不断迭代项目列表。

您的代码定义了一个实现此接口的类。它基本上提供了与原生支持的数组相同的功能,但添加了一些回显语句。

为什么要使用迭代器?

Iterator 的优点是它提供了一个高级抽象接口,因此调用它的代码不需要太担心发生了什么。同时,它允许您以块的形式处理大型数据源(从数据库中获取行,从文件中读取行),而无需一次将所有内容加载到内存中。

于 2011-03-16T09:58:53.427 回答