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

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

作成日: 更新日:

基本的な使い方

『DOCUMENT_POSITION_CONTAINS定数は、DOMドキュメント内における2つのノードの位置関係を示すために使用される定数です。この定数はDOMNodeインターフェースで定義されており、DOMAttrクラスもこれを実装しています。主にDOMNode::compareDocumentPosition()メソッドの返り値として利用されるビットマスク値の一つであり、メソッドを呼び出したノードが、引数で指定された比較対象のノードを内包している状態、つまり子孫として含んでいることを表します。例えば、<div>要素ノードがその内部に<p>要素ノードを持っている場合、divノードからpノードを比較すると、返り値のビットマスクにこのDOCUMENT_POSITION_CONTAINSが含まれます。compareDocumentPosition()メソッドの返り値は、複数の状態を同時に表現できるビットマスクであるため、この定数は他の位置関係を示す定数と組み合わせて返されることがあります。これは、あるノードが比較対象のノードを含み、かつ文書順で先行している、といった複合的な関係性を一度に判定するために役立ちます。

構文(syntax)

1<?php
2
3$dom = new DOMDocument();
4$dom->loadXML('<user role="admin"><name>Alice</name></user>');
5
6// ノードを取得
7$userElement = $dom->documentElement;
8$roleAttribute = $userElement->getAttributeNode('role');
9
10// 2つのノードの位置関係を比較
11$position = $userElement->compareDocumentPosition($roleAttribute);
12
13// ビットマスクを使用して包含関係を判定
14// DOMAttr::DOCUMENT_POSITION_CONTAINS は、
15// 参照ノードが比較対象ノードを含んでいることを示します。
16if ($position & DOMAttr::DOCUMENT_POSITION_CONTAINS) {
17    // user要素はrole属性を含んでいるため、このブロックが実行される
18    var_dump(true);
19} else {
20    var_dump(false);
21}
22
23?>

引数(parameters)

引数なし

引数はありません

戻り値(return)

戻り値なし

戻り値はありません

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