【PHP8.x】DOCUMENT_POSITION_PRECEDING定数の使い方
DOCUMENT_POSITION_PRECEDING定数の使い方について、初心者にもわかりやすく解説します。
作成日: 更新日:
基本的な使い方
『DOCUMENT_POSITION_PRECEDING定数は、DOMドキュメント内における2つのノードの位置関係を示すために用いられる定数です。具体的には、あるノードを基準として別のノードの位置を比較した際に、比較対象のノードが基準ノードよりも前に出現することを示します。この定数は、主にDOMNode::compareDocumentPosition()メソッドの返り値として利用されます。このメソッドは、2つのノードの前後関係や親子関係などを判定するために使われ、結果をビットマスク形式の整数値で返します。したがって、compareDocumentPosition()の実行結果にDOCUMENT_POSITION_PRECEDINGのビットが含まれているかどうかを確認することで、ノードの順序を判断できます。判定は、メソッドの返り値とこの定数をビット単位のAND演算子(&)を用いて行います。この演算結果が0でなければ、比較対象のノードが基準ノードより先行していると結論付けられます。ここでの「前」とは、HTMLやXMLソースコードにおける出現順序、すなわちDOMツリー構造における先行順走査に基づいた位置関係を指します。
構文(syntax)
1<?php 2 3$dom = new DOMDocument(); 4$dom->loadXML('<root><p>first</p><span>second</span></root>'); 5 6$p_node = $dom->getElementsByTagName('p')->item(0); 7$span_node = $dom->getElementsByTagName('span')->item(0); 8 9// 2つのテキストノードを取得 10$first_text = $p_node->firstChild; // DOMText "first" 11$second_text = $span_node->firstChild; // DOMText "second" 12 13// 2番目のノードから見て、最初のノードの位置を比較 14$position = $second_text->compareDocumentPosition($first_text); 15 16// 比較結果が「先行している」ことを示す定数とビット単位で比較 17if ($position & DOMText::DOCUMENT_POSITION_PRECEDING) { 18 // $first_text は $second_text より前に出現するため、この条件は true になる 19 echo "最初のテキストノードは、2番目のテキストノードより前にあります。"; 20} 21 22?>
引数(parameters)
引数なし
引数はありません
戻り値(return)
int
DOCUMENT_POSITION_PRECEDING は、ノードが指定されたノードより先行する位置にあることを示す整数値です。