【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 を返します。

関連コンテンツ

【PHP8.x】previousSiblingプロパティの使い方 | いっしー@Webエンジニア