【PHP8.x】previousSiblingプロパティの使い方
previousSiblingプロパティの使い方について、初心者にもわかりやすく解説します。
基本的な使い方
previousSiblingプロパティは、現在のDom\Elementオブジェクトの直前にある兄弟ノードを保持するプロパティです。このプロパティは、PHPのDom拡張機能の一部であり、HTMLやXMLのような構造化されたドキュメントの内部をプログラムで探索し、操作するために利用されます。
DOM(Document Object Model)ツリーにおいて、ドキュメント内のすべての要素やテキストなどは「ノード」として表現され、これらは親子関係や兄弟関係を持って階層的に配置されています。previousSiblingプロパティは、現在のDom\Elementオブジェクトが表す要素と「同じ親要素を持つ」ノードの中から、ドキュメントの構造上で「現在の要素の直前に位置する」ノードへの参照を提供します。
このプロパティが返す値は、直前の兄弟ノードそのものであるDom\Nodeオブジェクトです。もし、現在の要素の直前に兄弟ノードが存在しない場合、つまり現在の要素が親要素の最初の子ノードである場合には、このプロパティはnullを返します。
このプロパティを使用することで、例えば、特定のHTML要素が見つかった際に、その直前にあるテキストや他の要素の内容を読み取ったり、それらを操作したりすることが可能になります。Webコンテンツの解析、動的なページ生成、既存のドキュメント構造の変更など、DOM操作を必要とする様々なシナリオで、要素間のナビゲーションを効率的に行うための重要な手段となります。
構文(syntax)
1<?php 2// Dom\Element クラスのインスタンスを $element と仮定します。 3// 例として、HTML文字列からDOM要素を生成します。 4$dom = new DOMDocument(); 5$dom->loadHTML('<div><span>Sibling 1</span><p id="current">Current Element</p><span>Sibling 2</span></div>'); 6 7// ID 'current' を持つ要素(<p>タグ)を取得します。 8// この $element は Dom\Element のインスタンスです。 9$element = $dom->getElementById('current'); 10 11// $element の直前の兄弟ノードを取得する構文 12// 取得される $previousSiblingNode は Dom\Node クラスのインスタンス、 13// もしくは直前の兄弟ノードが存在しない場合は null になります。 14$previousSiblingNode = $element->previousSibling; 15 16// 取得したノードが実際にDom\Elementのインスタンスであるかを確認し、そのプロパティにアクセスする例 17if ($previousSiblingNode instanceof Dom\Element) { 18 echo "直前の兄弟要素のタグ名: " . $previousSiblingNode->tagName; // 例: span 19} elseif ($previousSiblingNode !== null) { 20 // 要素ではないが、テキストノードなどの兄弟ノードが存在する場合 21 echo "直前の兄弟ノードは要素ではありません。ノード名: " . $previousSiblingNode->nodeName; 22} else { 23 // 直前の兄弟ノードが存在しない場合 24 echo "直前の兄弟ノードはありません。"; 25} 26?>
引数(parameters)
引数なし
引数はありません
戻り値(return)
Dom\Node|null
このプロパティは、現在の要素の直前の兄弟ノードを返します。直前の兄弟ノードが存在しない場合は、null を返します。