【PHP8.x】parentNodeプロパティの使い方
parentNodeプロパティの使い方について、初心者にもわかりやすく解説します。
基本的な使い方
parentNodeプロパティは、DOMElementオブジェクトの親ノードを保持するプロパティです。具体的には、あるDOM要素(DOMElementオブジェクト)が、DOMツリー構造においてどのノードの子として存在するかを示す情報を保持します。parentNodeプロパティにアクセスすることで、その要素の親ノードにあたるDOMNodeオブジェクトを取得できます。
例えば、HTMLドキュメント内の <div> 要素を表すDOMElementオブジェクトがあるとします。この <div> 要素が <body> 要素の子である場合、その <div> 要素の parentNode プロパティは、<body> 要素に対応するDOMNodeオブジェクトを指します。
parentNodeプロパティは、DOMツリーを上方向に辿る際に非常に役立ちます。ある要素から、その親要素、さらにその親要素へと、DOMツリーを遡って必要な情報を取得したり、操作を行ったりすることが可能です。
parentNodeプロパティの値は、常にDOMNodeオブジェクト、または null のいずれかです。もし、その要素がDOMツリーのルートノード(例えば、Documentオブジェクト)である場合、parentNodeプロパティは null を返します。これは、ルートノードには親が存在しないためです。
DOMDocumentオブジェクト自体はparentNodeプロパティを持ちません。DOMDocumentはDOMツリーの頂点に位置するため、親ノードは存在しないからです。DOMElementオブジェクトがremoveChild()メソッドなどでDOMツリーから削除された場合でも、parentNodeプロパティは削除前に指していた親ノードを保持し続けます。これは、その要素がメモリ上に存在し続けている限り、元の親ノードの情報が維持されるためです。
構文(syntax)
1<?php 2$dom = new DOMDocument(); 3$element = $dom->createElement('child'); 4$root = $dom->appendChild($element); 5 6$parent = $element->parentNode; 7 8echo $parent === $dom ? '親ノードはDOMDocumentです' : '親ノードはDOMDocumentではありません'; 9?>
引数(parameters)
引数なし
引数はありません
戻り値(return)
DOMNode|null
このプロパティは、この要素の親ノードを表すDOMNodeオブジェクト、または親ノードが存在しない場合はnullを返します。
サンプルコード
PHP DOMのparentNodeを取得する
1<?php 2 3// DOMDocumentを新規作成 4$dom = new DOMDocument(); 5 6// ルート要素を作成 7$root = $dom->createElement('root'); 8$dom->appendChild($root); 9 10// 子要素を作成 11$child = $dom->createElement('child'); 12$root->appendChild($child); 13 14// child要素のparentNodeを取得 15$parentNode = $child->parentNode; 16 17// 親ノードが存在するか確認 18if ($parentNode !== null) { 19 // 親ノードの名前を表示 20 echo "親ノードの名前: " . $parentNode->nodeName . PHP_EOL; 21} else { 22 echo "親ノードは存在しません。" . PHP_EOL; 23} 24 25// root要素のparentNodeを取得 26$rootParentNode = $root->parentNode; 27 28// ルート要素の親はDOMDocumentなのでnullにはならない 29if ($rootParentNode !== null) { 30 echo "ルート要素の親ノードの名前: #" . $rootParentNode->nodeName . PHP_EOL; 31} else { 32 echo "ルート要素の親ノードは存在しません。" . PHP_EOL; 33} 34?>
このサンプルコードは、PHPのDOM拡張機能を使用して、XMLドキュメント内の要素の親ノードを取得する方法を示しています。具体的には、DOMElementクラスのparentNodeプロパティを利用します。
まず、DOMDocumentオブジェクトを作成し、ルート要素と子要素を生成してドキュメントに追加します。$child->parentNodeで子要素(child)の親ノードを取得し、そのノード名(この場合はroot)を出力します。親ノードが存在しない場合(例えば、要素がドキュメントにまだ追加されていない場合など)は、nullが返されるため、その場合の処理も記述されています。
次に、ルート要素(root)の親ノードを$root->parentNodeで取得しています。ルート要素の親ノードはDOMDocumentオブジェクト自身であるため、nodeNameプロパティで#documentと出力されます。ルート要素の親ノードは通常nullにはなりません。
parentNodeプロパティは引数を取りません。戻り値は、親ノードを表すDOMNodeオブジェクト、または親ノードが存在しない場合はnullです。このプロパティを使うことで、XMLドキュメントの構造を辿り、要素間の関係性を調べることができます。XMLドキュメントの構造をプログラムで操作する際に非常に重要な役割を果たします。
DOMElementのparentNodeは、要素の親ノードを返します。親ノードが存在しない場合、nullを返すことがあります。サンプルコードでは、child要素には親ノード(root)が存在するため、親ノードの名前が表示されます。一方、root要素の親ノードはDOMDocumentオブジェクトであり、nullではありません。parentNodeを使用する際は、戻り値がnullである可能性を考慮し、if ($parentNode !== null)のように明示的にチェックすることが重要です。これによって、存在しないノードにアクセスしようとするエラーを回避できます。DOMDocumentオブジェクト自体にも親ノードは存在しますが、それはドキュメントツリーの外部となるため、通常は意識する必要はありません。