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

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

作成日: 更新日:

基本的な使い方

beginChildrenメソッドは、階層構造を持つデータの反復処理において、子要素を持つ要素の処理を開始する直前に呼び出されるメソッドです。このメソッドは、RecursiveTreeIteratorがツリー構造を走査する過程で、現在の要素に子要素が存在する場合に自動的に実行されます。主な役割は、ツリー構造をテキスト形式で視覚的に表現する際に、子要素のリストが始まることを示すための接頭辞や記号を出力することです。例えば、ディレクトリツリーを表示する際に、各ディレクトリに含まれるファイルやサブディレクトリの一覧を表示する前に、このメソッドが呼び出され、枝分かれを示す線(例: |--)などを描画します。通常、このメソッドを開発者が直接呼び出すことはありませんが、RecursiveTreeIteratorを継承した独自のクラスでbeginChildrenメソッドをオーバーライド(再定義)することにより、ツリーの表示形式を自由にカスタマイズできます。これにより、デフォルトとは異なる記号を使ったり、子要素の処理を開始するタイミングで特定のログを出力したりといった独自の動作を実装することが可能になります。

構文(syntax)

1<?php
2
3class MyRecursiveTreeIterator extends RecursiveTreeIterator
4{
5    /**
6     * 子要素を持つ階層に入る際に呼び出されます。
7     */
8    public function beginChildren(): void
9    {
10        echo "<ul>\n";
11    }
12
13    /**
14     * 子要素の階層から出る際に呼び出されます。
15     */
16    public function endChildren(): void
17    {
18        echo "</ul>\n";
19    }
20}
21
22$data = [
23    'Item 1',
24    'Item 2',
25    [
26        'Sub-Item A',
27        'Sub-Item B',
28    ],
29    'Item 3'
30];
31
32$recursiveIterator = new RecursiveArrayIterator($data);
33$treeIterator = new MyRecursiveTreeIterator($recursiveIterator);
34
35// foreachで反復処理を行うと、サブ配列に入るタイミングで
36// beginChildren()が自動的に呼び出されます。
37foreach ($treeIterator as $value) {
38    if ($treeIterator->hasChildren()) {
39        echo "<li>{$value}</li>\n";
40    } else {
41        echo "<li>{$value}</li>\n";
42    }
43}

引数(parameters)

引数なし

引数はありません

戻り値(return)

戻り値なし

戻り値はありません