Iterator インターフェイスは、抽象的な Traversable インターフェイスを拡張します。 PHP は、多くの一般的な関数に対して、多数の組み込みイテレータ (SPL イテレータ と呼ばれる) を提供します。たとえば、ArrayIterator、DirectoryIterator などです。 Iterator インターフェースを実装するユーザー クラスは、その中で定義されている抽象メソッドを実装する必要があります。
Iterator extends Traversable { /* Methods */ abstract public current ( void ) : mixed abstract public key ( void ) : scalar abstract public next ( void ) : void abstract public rewind ( void ) : void abstract public valid ( void ) : bool }
Iterator::current — 現在の要素を返します
Iterator::key — 現在の要素のキーを返します
Iterator::next — 次の要素に移動
Iterator::rewind — イテレータを最初の要素まで巻き戻す
Iterator::valid — 現在の位置が有効かどうかを確認する
IteratorAggregate または Iterator インターフェイスを実装する場合、implements 句の名前の前にそれらをリストする必要があります。
次の PHP スクリプトでは、インターフェイスを実装するクラスにプライベート変数が配列として含まれています。イテレータの抽象メソッドを実装することで、foreach ループと next() メソッドを使用して配列を反復処理できます。
<?php class myIterator implements Iterator { private $index = 0; private $arr = array(10,20,30,40); public function __construct() { $this->index = 0; } public function rewind() { $this->index = 0; } public function current() { return $this->arr[$this->index]; } public function key() { return $this->index; } public function next() { ++$this->index; } public function valid() { return isset($this->arr[$this->index]); } } ?>
foreach ループを使用すると、MyIterator オブジェクトの配列プロパティを反復できます。
$it = new myIterator(); foreach($it as $key => $value) { echo "$key=>". $value ."</p><p>"; }
呼び出しによって反復を実行することもできます。 while ループnext() メソッドを実行します。ループを開始する前に、必ず反復子を rewind してください。
$it->rewind(); do { echo $it->key() . "=>" .$it->current() . "</p><p>"; $it->next(); } while ($it->valid());
どちらの場合も、配列プロパティを走査すると次の結果が表示されます
0=>10 1=>20 2=>30 3=>40
以上がPHP イテラブル インターフェイスの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。