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

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

作成日: 更新日:

基本的な使い方

parentNodeプロパティは、DOM(Document Object Model)ツリーにおける現在のノードの親ノードを保持するプロパティです。PHP 8の拡張機能であるDom\XMLDocumentクラスにおいて、このparentNodeプロパティは、XMLドキュメント全体を表すDom\XMLDocumentインスタンス自身がDOMツリーの最上位に位置するドキュメントノードであるため、その親ノードへの参照を提供します。

一般的に、DOMツリー内の要素やテキストなどのノードは、それぞれ親となるノードを持ちます。しかし、Dom\XMLDocumentオブジェクト自体は、文書全体の根幹をなす最上位のノードであり、それよりも上位の親ノードは存在しません。したがって、Dom\XMLDocumentインスタンスのparentNodeプロパティにアクセスした場合、通常は親ノードがないことを示すnullが返されます。

このプロパティの戻り値の型は、親ノードが存在する場合はDOMNodeオブジェクト、存在しない場合はnullとなります。この特性は、他のDOMノードの親要素を辿る一般的な用途とは異なり、Dom\XMLDocumentオブジェクトにおいては、その構造的な位置付けから常にnullを返すという点を理解しておくことが重要です。PHPでXMLドキュメントを操作する際に、各ノードの親子関係を把握する上で、このparentNodeプロパティの挙動は基本的な知識となります。

構文(syntax)

1<?php
2
3$xmlDocument = new Dom\XMLDocument();
4$parentNode = $xmlDocument->parentNode;
5
6?>

引数(parameters)

引数なし

引数はありません

戻り値(return)

?Dom\Node

Dom\XMLDocument オブジェクトの parentNode プロパティは、このドキュメントノードの親ノードを返します。ドキュメントノードの親ノードは通常 null です。

サンプルコード

PHP DOM DocumentのparentNodeを取得する

1<?php
2
3// XML ドキュメントをロード
4$dom = new DOMDocument();
5$dom->loadXML('<root><child>Text</child></root>');
6
7// 子ノードを取得
8$childNode = $dom->documentElement->firstChild;
9
10// 親ノードを取得
11$parentNode = $childNode->parentNode;
12
13// 親ノードが存在するか確認
14if ($parentNode) {
15    // 親ノードの名前を出力
16    echo $parentNode->nodeName . PHP_EOL; // Output: root
17} else {
18    echo "親ノードは存在しません。" . PHP_EOL;
19}
20
21?>

このPHPのサンプルコードは、DOMDocumentクラスを使用してXMLドキュメントを操作し、ノードの親ノードを取得する方法を示しています。まず、DOMDocumentクラスのインスタンスを作成し、loadXML()メソッドでXML文字列を読み込んでDOM構造を構築します。

次に、documentElementプロパティでドキュメントのルート要素を取得し、firstChildプロパティでその最初の子ノード(ここでは<child>要素)を取得します。この子ノードのparentNodeプロパティにアクセスすることで、親ノードを取得できます。

parentNodeプロパティは、親ノードが存在する場合はDom\Nodeオブジェクトを返し、存在しない場合はnullを返します。サンプルコードでは、if文を使って親ノードが存在するかどうかを確認し、存在する場合はnodeNameプロパティを使って親ノードの名前を出力しています。もし親ノードが存在しない場合は、「親ノードは存在しません。」というメッセージを出力します。

parentNodeプロパティは引数を取りません。ノードの親子関係を辿る際に非常に便利な機能です。戻り値の型は?Dom\Nodeであり、これはDom\Nodeオブジェクトまたはnullのいずれかであることを意味します。このサンプルコードは、XMLドキュメント内のノード間の関係性を理解し、操作するための基本的な手法を示しています。

Dom\XMLDocumentparentNodeは、ノードの親ノードを返しますが、ノードがドキュメントのルートノードである場合など、親ノードが存在しない場合はnullを返す可能性があります。サンプルコードでは、返り値がnullでないことを確認してから親ノードの情報を利用しています。?Dom\Node型は、Dom\Node型またはnullを意味するため、このチェックは重要です。親ノードの存在をチェックせずに$parentNode->nodeNameにアクセスすると、エラーが発生する可能性があります。また、XMLドキュメントの構造によっては、意図しないノードが親ノードとして返される場合もあるため、nodeNameだけでなく、他のプロパティも確認し、期待通りのノードであるか検証することをおすすめします。