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

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

作成日: 更新日:

基本的な使い方

『acceptメソッドは、イテレータの現在の要素が有効かどうかを判定するフィルタリング条件を定義するためのメソッドです。このメソッドは、抽象クラスであるFilterIteratorに定義されており、このクラスを継承して独自のフィルタクラスを作成する際に必ず実装する必要があります。foreachループなどでイテレータを反復処理すると、各要素に対して内部的にこのacceptメソッドが自動的に呼び出されます。メソッド内では、現在の要素が目的の条件を満たしているかを判定するロジックを記述します。判定結果は真偽値(bool)で返し、trueを返した場合はその要素が有効とみなされ、イテレーションの結果に含まれます。逆にfalseを返した場合は、その要素は無効とみなされ、スキップされます。この仕組みを利用することで、例えば「偶数のみを抽出する」や「特定の文字列を含む要素のみを抽出する」といった、独自のフィルタリングルールを持つカスタムイテレータを容易に作成することができます。

構文(syntax)

1<?php
2
3// FilterIteratorを継承して、独自のフィルタクラスを定義します。
4// この例では、偶数のみを通過させるフィルタです。
5class EvenNumberFilter extends FilterIterator
6{
7    /**
8     * このメソッドで、現在の要素がイテレーションに含まれるべきか判断します。
9     *
10     * @return bool trueを返すと現在の要素は有効、falseを返すと無効になります。
11     */
12    public function accept(): bool
13    {
14        // 現在の要素が偶数であればtrueを返します。
15        return $this->current() % 2 === 0;
16    }
17}
18
19// フィルタリング対象の配列
20$numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
21
22// 配列をイテレータに変換します。
23$iterator = new ArrayIterator($numbers);
24
25// 作成したフィルタクラスのインスタンスを生成し、イテレータを渡します。
26$filter = new EvenNumberFilter($iterator);
27
28// フィルタリングされた結果をforeachでループします。
29// accept() が true を返した要素だけが処理されます。
30foreach ($filter as $evenNumber) {
31    echo $evenNumber . "\n";
32}
33
34?>

引数(parameters)

引数なし

引数はありません

戻り値(return)

bool

FilterIterator::accept() メソッドは、現在の要素がフィルタリング基準を満たしているかどうかを示す真偽値(bool)を返します。true の場合は要素が保持され、false の場合はスキップされます。