【PHP8.x】rewindメソッドの使い方

rewindメソッドの使い方について、初心者にもわかりやすく解説します。

作成日: 更新日:

基本的な使い方

『rewindメソッドは、FilterIteratorを最初の要素に巻き戻す処理を実行するメソッドです』 このメソッドは、Iteratorインターフェースで定められた要件を満たすために実装されていますが、FilterIteratorではフィルタリングの特性を考慮した特別な動作をします。rewindが呼び出されると、まず内部的に保持している元のイテレータのrewindメソッドを実行し、そのポインタを先頭に戻します。その後、フィルタリング条件を定義したacceptメソッドを満たす最初の要素が見つかるまで、イテレータを順に進めていきます。条件に合致する要素が最初に見つかった時点で、内部ポインタはその位置で停止します。もし、イテレータの最後まで条件を満たす要素が一つも存在しなかった場合、イテレータは有効な状態ではなくなります。通常、このメソッドを直接呼び出すことは少なく、foreachループなどでFilterIteratorオブジェクトを走査する際に、PHPの内部処理として自動的に呼び出されます。これにより、常にフィルタリング後の結果セットの先頭から処理を開始することが保証されます。このメソッドは値を返しません。

構文(syntax)

1<?php
2// 偶数のみをフィルタリングするカスタムイテレータクラスを定義します
3class EvenNumberFilter extends FilterIterator
4{
5    public function accept(): bool
6    {
7        // 親イテレータの現在の値が偶数であれば true を返します
8        return $this->getInnerIterator()->current() % 2 === 0;
9    }
10}
11
12// 元となるデータを持つイテレータを作成します
13$numbers = new ArrayIterator([1, 2, 3, 4, 5, 6]);
14
15// カスタムイテレータをインスタンス化します
16$iterator = new EvenNumberFilter($numbers);
17
18// foreach は内部で rewind() を呼び出し、先頭から処理を開始します
19// 最初の有効な要素は 2 です
20
21// next() を呼び出して、イテレータを次の有効な要素 (4) へ進めます
22$iterator->next();
23
24// この時点での現在の要素は 4 です
25// echo $iterator->current();
26
27// rewind() メソッドを呼び出し、イテレータを先頭に巻き戻します
28$iterator->rewind();
29
30// 巻き戻されたため、現在の要素は最初の有効な要素である 2 に戻ります
31echo $iterator->current(); // 2

引数(parameters)

引数なし

引数はありません

戻り値(return)

戻り値なし

戻り値はありません