【PHP8.x】RecursiveIteratorIterator::endChildren()メソッドの使い方
endChildrenメソッドの使い方について、初心者にもわかりやすく解説します。
作成日: 更新日:
基本的な使い方
endChildrenメソッドは、RecursiveIteratorIteratorが子要素を持つ要素の反復処理を終了したときに呼び出される処理を実行するメソッドです。このメソッドは、木構造のような階層的なデータを再帰的に処理する際に、ある階層の探索を終えて親の階層に戻る直前のタイミングで実行されます。これは、子要素の処理を開始する直前に呼び出されるbeginChildrenメソッドと対になる関係にあります。endChildrenメソッドの主な用途は、RecursiveIteratorIteratorクラスを継承した独自のクラスを作成し、その中でこのメソッドをオーバーライド(再定義)して、階層の終わりを示すためのカスタム処理を実装することです。例えば、ディレクトリ構造をHTMLのリストとして出力する場合、サブディレクトリ内のすべての要素をリストアップし終えた後に、リストを閉じるための</ul>タグを出力する、といった後処理をこのメソッド内に記述することができます。このメソッドは引数を取らず、戻り値もありません。デフォルトの状態では何も処理を行わないため、開発者が必要に応じて具体的な処理を実装して使用します。
構文(syntax)
1<?php 2 3// RecursiveIteratorIteratorを継承したカスタムクラスを定義します 4class MyRecursiveIterator extends RecursiveIteratorIterator 5{ 6 /** 7 * 子要素を持つ階層の反復が終了したときに呼び出されます。 8 * このメソッドをオーバーライドすることで、 9 * 子要素のリストの末尾で特定の処理を実行できます。 10 */ 11 public function endChildren(): void 12 { 13 echo " (この階層の子要素はここまで)\n"; 14 } 15} 16 17// 再帰的なデータ構造(多次元配列) 18$data = [ 19 'ヨーロッパ' => [ 20 'イタリア', 21 'フランス', 22 ], 23 'アジア' => [ 24 '日本', 25 '韓国', 26 ], 27]; 28 29// RecursiveArrayIterator とカスタムクラスを組み合わせてイテレータを作成 30$iterator = new MyRecursiveIterator( 31 new RecursiveArrayIterator($data), 32 RecursiveIteratorIterator::SELF_FIRST 33); 34 35// イテレータをループ処理して結果を表示 36foreach ($iterator as $key => $value) { 37 // getDepth() で現在の階層の深さを取得し、インデントを調整 38 $indent = str_repeat(' ', $iterator->getDepth()); 39 40 if ($iterator->hasChildren()) { 41 echo $indent . $key . ":\n"; 42 } else { 43 echo $indent . "- " . $value . "\n"; 44 } 45}
引数(parameters)
引数なし
引数はありません
戻り値(return)
void
現在のイテレータの親要素のイテレータを指し示すポインタを、その親要素の最後の子要素の次に移動させます。このメソッドは値を返しません。