【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->parentNode は null を返します。この null チェックを行うことで、親ノードが存在しない場合の処理を適切に行うことができます。
parentNodeプロパティを利用することで、DOMツリーを遡って親要素を辿ることが可能になります。これは、特定の要素のコンテキストを理解したり、DOM構造全体を操作したりする際に非常に役立ちます。null が返される場合があることに注意し、適切なエラーハンドリングを行うようにしましょう。
DOMDocumentのparentNodeは、指定したノードの親ノードを返します。親ノードが存在しない場合、nullを返すことに注意が必要です。例えば、ドキュメントのルート要素(documentElement)のparentNodeはnullになります。nullチェックを怠ると、その後の処理でエラーが発生する可能性があります。parentNodeの戻り値を使用する前に、必ずnullでないことを確認しましょう。また、HTML構造によっては、意図しない要素が親ノードとして返される場合があるため、nodeNameなどを利用して、親ノードが期待するものかどうかを確認することをお勧めします。