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

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

作成日: 更新日:

基本的な使い方

『currentメソッドは、フィルタリング後のイテレータで現在位置にある要素を取得するために実行するメソッドです』

このメソッドは、PHPのIteratorインターフェースで定義されている基本的なメソッドの一つであり、FilterIteratorクラスで利用されます。FilterIteratorは、配列や他のイテレータオブジェクトを元にして、特定の条件を満たす要素だけを抽出するためのものです。currentメソッドは、その抽出条件(acceptメソッドで定義)を通過した要素のうち、イテレータが現在指し示している要素の値を返します。foreachループでFilterIteratorのインスタンスを反復処理する場合、ループの各サイクルで変数に代入される値は、このcurrentメソッドが返す値そのものです。返される値のデータ型は、元のイテレータに含まれる要素の型に依存するため、文字列、数値、オブジェクトなど様々です。もしイテレータが有効な要素を指していない場合、例えば反復処理が終了した後などに呼び出されると、nullなどを返すことがあります。

構文(syntax)

1<?php
2// 偶数のみを許可するカスタムフィルタクラス
3class EvenNumberFilter extends FilterIterator
4{
5    // このメソッドが true を返した要素のみがイテレーションの対象となる
6    public function accept(): bool
7    {
8        // 親イテレータの現在の値を取得し、偶数かどうかを判定
9        $currentValue = parent::current();
10        return $currentValue % 2 === 0;
11    }
12}
13
14// フィルタリング対象のデータを持つイテレータ
15$arrayIterator = new ArrayIterator([1, 2, 3, 4, 5, 6, 7, 8]);
16
17// フィルタを適用したイテレータを作成
18$filterIterator = new EvenNumberFilter($arrayIterator);
19
20// フィルタされたイテレータをループで処理する
21// foreachループは、内部で valid(), current(), next() を自動的に呼び出す
22foreach ($filterIterator as $value) {
23    // この $value には、FilterIterator::current() が返した値が格納される
24    echo $value . PHP_EOL;
25}
26?>

引数(parameters)

引数なし

引数はありません

戻り値(return)

mixed

現在のイテレータが指している要素を返します。要素が存在しない場合は null を返します。