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

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

作成日: 更新日:

基本的な使い方

validメソッドは、イテレータの現在の位置が有効かどうかを判定するメソッドです。このメソッドは、foreach文などでイテレータを反復処理する際に、ループを継続するかどうかを決定するために内部的に呼び出されます。具体的には、現在イテレータが指している位置にアクセス可能な要素が存在するかどうかを確認します。RecursiveFilterIteratorにおけるvalidメソッドは、単に内部的に保持しているイテレータの有効性を確認するだけではありません。それに加えて、現在の要素がacceptメソッドで定義されたフィルタリング条件を満たしているかどうかも同時に評価します。したがって、内部イテレータの位置が有効であっても、その要素がフィルタ条件に合致しない場合は、このメソッドはfalseを返します。現在の位置が有効であり、かつフィルタ条件も満たす場合にのみtrueを返し、イテレータの終端に達した場合など、有効な要素が存在しない状況ではfalseを返します。この結果に基づき、反復処理が継続または終了されます。

構文(syntax)

1<?php
2class IntegerOnlyFilter extends RecursiveFilterIterator
3{
4    public function accept(): bool
5    {
6        // 現在の要素が整数である場合のみ true を返す
7        return is_int($this->current());
8    }
9}
10
11$data = [1, 'apple', 2, ['orange', 3], 4, 'banana'];
12
13$arrayIterator = new RecursiveArrayIterator($data);
14$filterIterator = new IntegerOnlyFilter($arrayIterator);
15$iterator = new RecursiveIteratorIterator($filterIterator);
16
17// イテレータを先頭に巻き戻す
18$iterator->rewind();
19
20// valid() メソッドが true を返す間、ループ処理を行う
21while ($iterator->valid()) {
22    echo $iterator->current() . PHP_EOL;
23    $iterator->next();
24}
25?>

引数(parameters)

引数なし

引数はありません

戻り値(return)

bool

現在の要素が有効な場合はtrueを、そうでなければfalseを返します。