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

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

作成日: 更新日:

基本的な使い方

parentNodeプロパティは、PHPのDOMDocumentクラスに属し、特定のノードの親ノードを保持するプロパティです。DOM(Document Object Model)は、HTMLやXMLドキュメントの構造を木(ツリー)のような階層で表現します。この階層において、あるノードの直接の親となるノードが「親ノード」と呼ばれます。

DOMDocumentクラスは、PHPのDOM拡張機能において、HTMLやXMLドキュメント全体を表すルートノードです。ドキュメントツリーの最上位に位置するため、DOMDocumentオブジェクト自体は、それより上位に親ノードを持つことはありません。そのため、DOMDocumentオブジェクトのparentNodeプロパティにアクセスした場合、その値は常にnullとなります。

このプロパティは、DOMDocumentクラスが基底となるDOMNodeクラスを継承しているため存在しますが、DOMDocumentの性質上、親を持たないという特性を示します。他のDOMElementやDOMTextなどのノードでは、parentNodeプロパティはそれぞれの親ノード(DOMElement、DOMDocument、またはnull)を返しますが、DOMDocumentに限っては常にnullを返します。DOMツリーを走査するプログラムを作成する際には、このDOMDocument特有の挙動を理解しておくことが、意図しないエラーを防ぎ、堅牢なコードを書く上で役立ちます。

構文(syntax)

1<?php
2$document = new DOMDocument();
3$parentNode = $document->parentNode;
4?>

引数(parameters)

引数なし

引数はありません

戻り値(return)

null

parentNode プロパティは、そのノードの親ノードを表す DOMNode オブジェクトを返します。ただし、ルートノードの場合は null が返されます。

サンプルコード

PHP DOM parentNode で親ノードを取得する

1<?php
2
3// DOMDocumentを生成
4$dom = new DOMDocument();
5
6// HTMLをロード
7$dom->loadHTML('<html><body><div><p>Hello, world!</p></div></body></html>');
8
9// p要素を取得
10$p = $dom->getElementsByTagName('p')->item(0);
11
12// p要素の親ノードを取得
13$parentNode = $p->parentNode;
14
15// 親ノードが存在する場合、ノード名を出力
16if ($parentNode !== null) {
17    echo "親ノードのノード名: " . $parentNode->nodeName . PHP_EOL; // 出力: 親ノードのノード名: div
18} else {
19    echo "親ノードは存在しません。" . PHP_EOL;
20}
21
22// 親ノードが存在しない例(ドキュメントノードのparentNodeはnull)
23$documentElement = $dom->documentElement;
24$rootParentNode = $documentElement->parentNode;
25
26if ($rootParentNode === null) {
27    echo "ルート要素の親ノードは存在しません(null)。" . PHP_EOL; //出力: ルート要素の親ノードは存在しません(null)。
28}
29
30?>

PHPのDOMDocumentクラスにおけるparentNodeプロパティは、ノードの親ノードを取得するために使用します。このプロパティは引数を持ちません。

サンプルコードでは、まずDOMDocumentオブジェクトを生成し、HTML文字列をロードしています。次に、getElementsByTagNameメソッドを使って <p> 要素を取得し、その要素のparentNodeプロパティにアクセスしています。parentNodeプロパティは、親ノードが存在する場合は親ノードのオブジェクトを返し、存在しない場合は null を返します。

コード例では、まず <p> 要素の親ノード(<div> 要素)を取得し、そのノード名を出力しています。$parentNode->nodeName でノード名を取得できます。

次に、親ノードが存在しない例として、ドキュメントのルート要素(<html> 要素)の親ノードを取得しています。ドキュメントのルート要素は、DOMツリーの最上位に位置するため、親ノードは存在しません。したがって、$documentElement->parentNodenull を返します。この null チェックを行うことで、親ノードが存在しない場合の処理を適切に行うことができます。

parentNodeプロパティを利用することで、DOMツリーを遡って親要素を辿ることが可能になります。これは、特定の要素のコンテキストを理解したり、DOM構造全体を操作したりする際に非常に役立ちます。null が返される場合があることに注意し、適切なエラーハンドリングを行うようにしましょう。

DOMDocumentparentNodeは、指定したノードの親ノードを返します。親ノードが存在しない場合、nullを返すことに注意が必要です。例えば、ドキュメントのルート要素(documentElement)のparentNodenullになります。nullチェックを怠ると、その後の処理でエラーが発生する可能性があります。parentNodeの戻り値を使用する前に、必ずnullでないことを確認しましょう。また、HTML構造によっては、意図しない要素が親ノードとして返される場合があるため、nodeNameなどを利用して、親ノードが期待するものかどうかを確認することをお勧めします。

関連コンテンツ

関連プログラミング言語