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

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

作成日: 更新日:

基本的な使い方

『getChildrenメソッドは、現在のイテレータ要素が子要素を持つ場合に、その子要素を走査するための新しいイテレータを生成して返す処理を実行するメソッドです。このメソッドは、ディレクトリツリーのような階層構造を持つデータを再帰的に処理する際に重要な役割を担います。RecursiveFilterIteratorクラスのコンテキストにおいて、getChildrenメソッドが返すのは単なる子イテレータではありません。返されるのは、元のイテレータと同じフィルタリング条件が適用された、新しいRecursiveFilterIteratorのインスタンスです。この仕組みにより、階層の深い部分にある子要素に対しても、親と同じルールで一貫したフィルタリングを自動的に適用しながら走査を継続できます。例えば、特定の拡張子を持つファイルのみをサブディレクトリを含めて検索するような場合に、このメソッドが内部で呼び出されることで、条件に合わないディレクトリやファイルを効率的に除外できます。通常、hasChildrenメソッドを呼び出して子要素の存在を確認した後に、このメソッドが利用されます。

構文(syntax)

1<?php
2
3class ExampleFilter extends RecursiveFilterIterator
4{
5    public function accept(): bool
6    {
7        // フィルタリングの条件をここに記述しますが、この例では常にtrueを返します
8        return true;
9    }
10}
11
12$data = [
13    'first_level' => [
14        'second_level_item_1',
15        'second_level_item_2',
16    ],
17];
18
19$iterator = new ExampleFilter(
20    new RecursiveArrayIterator($data)
21);
22
23// イテレータを最初の要素に設定します
24$iterator->rewind();
25
26// 現在の要素('first_level')が子を持つか確認します
27if ($iterator->hasChildren()) {
28    // 子要素をイテレートするための新しいイテレータを取得します
29    $childrenIterator = $iterator->getChildren();
30}
31

引数(parameters)

引数なし

引数はありません

戻り値(return)

?RecursiveIterator

現在の要素の子要素を保持するRecursiveIterator、もしくは子要素が存在しない場合はnullを返します。