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

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

作成日: 更新日:

基本的な使い方

validメソッドは、イテレータの現在の要素が有効かどうかをチェックするメソッドです。このメソッドは、FilterIteratorクラス、またはそのサブクラスのインスタンスに対して使用されます。FilterIteratorは、配列や他のイテレータブルなオブジェクトの要素を特定の条件でフィルタリングするために利用される抽象クラスです。foreachループなどでイテレータを反復処理する際、PHPのエンジンは内部的にこのvalidメソッドを呼び出します。validメソッドがtrueを返す条件は2つあります。まず、元となる内部イテレータがまだ終端に達しておらず、有効な要素を指している必要があります。次に、その要素がFilterIteratorのサブクラスで実装されたacceptメソッドのフィルタリング条件を満たしている必要があります。この両方の条件が満たされた場合にのみtrueを返し、そうでなければfalseを返します。validメソッドがfalseを返すと、反復処理は終了します。したがって、このメソッドはフィルタリング処理において、ループを継続するかどうかを決定する重要な役割を担っています。

構文(syntax)

1<?php
2
3// 偶数のみを通過させるカスタムイテレータ
4class EvenNumberFilter extends FilterIterator
5{
6    public function accept(): bool
7    {
8        // 親イテレータの現在の要素が偶数なら true を返す
9        return $this->current() % 2 === 0;
10    }
11}
12
13// フィルタリングする元のデータを持つイテレータ
14$numbers = new ArrayIterator([1, 2, 3, 4, 5, 6, 7, 8]);
15
16// カスタムイテレータをインスタンス化
17$iterator = new EvenNumberFilter($numbers);
18
19// valid() は、イテレータの現在の位置が有効かどうかをチェックします。
20// while ループは、valid() が true を返す間、処理を続けます。
21while ($iterator->valid()) {
22    // 現在のキーと値を取得
23    $key = $iterator->key();
24    $value = $iterator->current();
25    echo "{$key}: {$value}" . PHP_EOL;
26
27    // 次の要素に進める
28    $iterator->next();
29}
30
31?>

引数(parameters)

引数なし

引数はありません

戻り値(return)

bool

現在のイテレータが有効な要素を指している場合に true を返します。無効な場合は false を返します。