【PHP8.x】firstChildプロパティの使い方

firstChildプロパティの使い方について、初心者にもわかりやすく解説します。

作成日: 更新日:

基本的な使い方

firstChildプロパティは、Dom\CharacterDataクラスに属し、そのノードの最初の子ノードを保持するプロパティです。Dom\CharacterDataクラスは、PHPのDOM拡張機能において、XMLやHTMLドキュメント内で文字データを直接保持するノードの基底クラスとして定義されています。具体的には、テキストノード(要素間の文字列)、コメントノード(<!-- ... -->)、そしてCDATAセクションノード(<![CDATA[ ... ]]>)などがこのクラスのサブタイプにあたります。

一般的なDOMノード、例えば要素ノード(<div><p>など)の場合、firstChildプロパティは、そのノードが持つ子ノードのリストの中から、最初に位置する子ノードへの参照を返します。これにより、ドキュメントツリー構造をたどり、特定のノードの子要素やテキストにアクセスする際に利用されます。もし対象のノードに子ノードが一つも存在しない場合は、このプロパティはnullを返します。

しかし、Dom\CharacterDataクラスのインスタンスであるテキストノードやコメントノードは、それ自体が直接文字データの内容を保持する特殊なノードです。これらのノードはDOMの構造上、それ自身の内部にさらに別の子ノードを持つことはありません。例えば、「Hello World」というテキストノードは、その文字列自体がノードの「値」であり、その文字列の中に別のDOMノードが埋め込まれているわけではないため、子ノードが存在しないという特性を持っています。

したがって、Dom\CharacterDataクラスのオブジェクトに対してfirstChildプロパティにアクセスした場合、結果は常にnullとなります。これは、Dom\CharacterData型のノードがDOMツリーにおいて「葉ノード」(末端ノード)として振る舞い、子ノードを持たないという設計上の特性によるものです。これらのノードが保持する実際の文字データにアクセスするには、firstChildプロパティではなく、dataプロパティやnodeValueプロパティを使用する必要があることに注意してください。

構文(syntax)

1<?php
2
3$dom = new DOMDocument();
4$characterDataNode = $dom->createTextNode("Sample text content.");
5
6// Dom\CharacterData::firstChild プロパティにアクセス
7// CharacterData ノードは子ノードを持たないため、このプロパティは常に null を返します。
8$first = $characterDataNode->firstChild;
9
10var_dump($first);
11
12?>

引数(parameters)

引数なし

引数はありません

戻り値(return)

Dom\Node|null

このプロパティは、現在のノードの最初の子ノードを表す Dom\Node オブジェクト、または子ノードが存在しない場合は null を返します。