【PHP8.x】DOCUMENT_POSITION_CONTAINED_BY定数の使い方

DOCUMENT_POSITION_CONTAINED_BY定数の使い方について、初心者にもわかりやすく解説します。

作成日: 更新日:

基本的な使い方

『DOCUMENT_POSITION_CONTAINED_BY定数は、DOMドキュメント内における2つのノードの位置関係を示すために用いられる定数です。この定数は、DOMNode::compareDocumentPosition() メソッドが返すビットマスク値の一つとして定義されています。このメソッドは、あるノードが別のノードに対してどのような位置にあるか、例えば先行しているか、後続しているか、あるいは内包しているかなどを判定するために使用されます。compareDocumentPosition() の実行結果のビットマスクに DOCUMENT_POSITION_CONTAINED_BY が含まれている場合、それはメソッドを呼び出したノードが、引数で渡されたノードに内包されている、つまり子孫ノードであることを意味します。例えば、$childNode->compareDocumentPosition($parentNode) という形式で呼び出した際に、この定数が結果に含まれていれば $childNode$parentNode の子や孫にあたります。この定数は他の位置関係を示す定数と組み合わせて返されることがあるため、特定の関係を判定するにはビット演算子 & を用いて、返り値にこの定数のビットが含まれているかを確認する必要があります。これにより、DOMツリーの複雑な階層構造をプログラムで正確に把握することが可能になります。』

構文(syntax)

1<?php
2
3$dom = new DOMDocument();
4$dom->loadXML('<book><chapter title="Introduction" /></book>');
5
6// 親要素ノードを取得
7$bookNode = $dom->getElementsByTagName('book')->item(0);
8
9// 属性ノードを取得
10$titleAttr = $dom->getElementsByTagName('chapter')->item(0)->getAttributeNode('title');
11
12// 属性ノードが親要素ノードに含まれているか比較
13$position = $bookNode->compareDocumentPosition($titleAttr);
14
15// 比較結果が「含まれている」状態かビットマスクで判定
16if ($position & DOMAttr::DOCUMENT_POSITION_CONTAINED_BY) {
17    // 属性は要素に含まれているため、この条件は true になる
18    // DOMAttr::DOCUMENT_POSITION_CONTAINED_BY の値は 16
19    echo "The title attribute is contained by the book element.";
20}
21
22?>

引数(parameters)

引数なし

引数はありません

戻り値(return)

戻り値なし

戻り値はありません

【PHP8.x】DOCUMENT_POSITION_CONTAINED_BY定数の使い方 | いっしー@Webエンジニア