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コンストラクトを使用してアイテムのリストを継続的に反復するための汎用インターフェイスを提供します。

コードは、このインターフェースを実装するクラスを定義します。基本的に、配列がネイティブにサポートするのと同じ機能を提供しますが、いくつかの echo ステートメントを追加します。

イテレータを使用する理由

Iterator の利点は、高レベルの抽象化されたインターフェイスを提供することです。そのため、Iterator を呼び出すコードは、何が起こっているかについてそれほど心配する必要はありません。同時に、一度にすべてをメモリにロードすることなく、大きなデータ ソース (データベースから行をフェッチし、ファイルから行を読み取る) をチャンクで処理できます。

于 2011-03-16T09:58:53.427 に答える