【PHP8.x】containsメソッドの使い方

containsメソッドの使い方について、初心者にもわかりやすく解説します。

作成日: 更新日:

基本的な使い方

containsメソッドは、XML文書全体を表すDom\XMLDocumentオブジェクトが、指定されたノードをその文書ツリー内に含んでいるかどうかを判定するメソッドです。このメソッドは、引数として渡されたノードが、呼び出し元のXMLDocumentオブジェクト自身であるか、またはその子孫ノードとして存在するかを確認します。

もし指定されたノードが文書ツリー内に存在し、かつXMLDocumentオブジェクトの直下またはさらに深い階層の子孫として位置する場合はtrueを返します。それ以外の場合、例えば指定されたノードが別の文書に属している場合や、全く関係のないノードである場合はfalseを返します。

これにより、システムエンジニアはXML文書の構造をプログラム的に検証し、特定の要素やノードが期待される場所に正しく配置されているかを確認できます。例えば、動的に生成・追加されたノードが正しく文書ツリーの一部となっているか、あるいは特定のイベントが発生したノードが、現在処理している文書の範囲内にあるかなどを効率的に判断する際に役立ちます。文書の整合性を保ち、正確なDOM操作を行う上で不可欠な機能と言えます。

構文(syntax)

1<?php
2$xmlDocumentInstance = new Dom\XMLDocument();
3$otherDomNode = new DOMElement('element');
4$result = $xmlDocumentInstance->contains($otherDomNode);
5?>

引数(parameters)

?Dom\Node $other

  • ?Dom\Node $other: 比較対象となるDOMノード

戻り値(return)

戻り値なし

戻り値はありません

サンプルコード

PHP DomDocument::contains() でノードの存在を確認する

1<?php
2
3// Dom\XMLDocument::contains() の使用例
4
5// XML ドキュメントを新規作成
6$dom = new DOMDocument();
7$dom->loadXML('<root><child>Text</child></root>');
8
9// 別のノードを作成 (このノードはドキュメントに属していない)
10$otherDom = new DOMDocument();
11$otherNode = $otherDom->createElement('anotherChild');
12$otherNode->textContent = 'Another Text';
13
14// ドキュメントにノードが含まれていないことを確認
15$contains = $dom->contains($otherNode);
16
17if ($contains === false) {
18    echo "ドキュメントは指定されたノードを含んでいません。\n";
19} else {
20    echo "ドキュメントは指定されたノードを含んでいます。\n";
21}
22
23// ドキュメントに存在するノードを取得
24$childNode = $dom->documentElement->firstChild;
25
26// ドキュメントにノードが含まれていることを確認
27$contains = $dom->contains($childNode);
28
29if ($contains === true) {
30    echo "ドキュメントは指定されたノードを含んでいます。\n";
31} else {
32    echo "ドキュメントは指定されたノードを含んでいません。\n";
33}
34
35?>

このサンプルコードは、PHPのDom\XMLDocumentクラスのcontains()メソッドの使い方を示しています。contains()メソッドは、指定されたノードがそのXMLドキュメントに含まれているかどうかをチェックするために使用されます。

まず、新しいDOMDocumentオブジェクトを作成し、XML文字列をロードします。次に、別のDOMDocumentオブジェクトを作成し、createElement()メソッドで新しいノードを作成します。この時点では、新しいノードは最初のドキュメントには属していません。contains()メソッドにこのノードを引数として渡すと、ドキュメントがそのノードを含んでいないため、falseが返されます。

次に、最初のドキュメントから既存のノード (childNode) を取得します。このノードはドキュメントの一部であるため、contains()メソッドにこのノードを引数として渡すと、ドキュメントがそのノードを含んでいるため、trueが返されます。

引数 $other には、チェックしたい Dom\Node オブジェクトを指定します。この引数はnullableであり、nullを渡すこともできます。contains()メソッドは、ノードが含まれている場合は true、含まれていない場合は false を返します。このメソッドを使うことで、特定のノードがXMLドキュメント内に存在するかどうかを簡単に確認できます。

Dom\XMLDocument::contains()メソッドは、指定されたノードがXMLドキュメントに含まれているかどうかを判定します。重要な点として、このメソッドはノードそのものがドキュメント内に存在するかどうかを確認するのであり、ノードのテキストコンテンツが一致するかどうかではありません。$other引数にはDom\Nodeオブジェクトを渡す必要があります。サンプルコードでは、$otherNodeが最初は別のドキュメントに属しているためfalseが返りますが、$childNodeは元のドキュメントに属しているのでtrueが返ります。ノードが別のドキュメントからインポートされたものであっても、元のドキュメントに追加されていなければfalseが返ることに注意してください。引数にnullを渡すと、PHP8.0以降ではTypeErrorが発生します。

PHP DOMDocument containsメソッドでノード包含を判定する

1<?php
2
3// Dom\XMLDocument::contains メソッドのサンプルコード
4
5// XMLドキュメントを作成
6$dom = new DOMDocument();
7$dom->loadXML('<root><item>Test</item></root>');
8
9// 別のドキュメントを作成
10$otherDom = new DOMDocument();
11$otherDom->loadXML('<item>Test</item>');
12
13// 比較対象のノードを作成 (ドキュメントに追加する)
14$newNode = $dom->createElement('new_item', 'New Item');
15$dom->documentElement->appendChild($newNode);
16
17// containsメソッドを使用してノードが含まれているか確認
18if ($dom->contains($newNode)) {
19    echo "ドキュメントはノードを含んでいます\n"; // この行が出力される
20} else {
21    echo "ドキュメントはノードを含んでいません\n";
22}
23
24// 別のドキュメントのノードは含まれていないはず
25$externalNode = $otherDom->documentElement;
26if ($dom->contains($externalNode)) {
27    echo "ドキュメントはノードを含んでいます\n";
28} else {
29    echo "ドキュメントはノードを含んでいません\n"; // この行が出力される
30}

PHP 8のDom\XMLDocumentクラスにおけるcontainsメソッドは、指定されたノードがドキュメントに含まれているかどうかを判定するために使用します。引数には、Dom\Node型のノードを指定します。このメソッドは戻り値を持たず、ドキュメントがノードを含んでいるかどうかは、メソッド呼び出し後の処理によって判断します。

サンプルコードでは、まずDOMDocumentオブジェクトを作成し、XMLデータをロードしています。次に、createElementメソッドとappendChildメソッドを使って、新しいノードをドキュメントに追加しています。

containsメソッドは、この新しく追加されたノード($newNode)を引数として呼び出され、ドキュメントがそのノードを含んでいるかをチェックします。この例では、$newNode$domドキュメントに追加されているため、"ドキュメントはノードを含んでいます"というメッセージが出力されます。

次に、別のDOMDocumentオブジェクト($otherDom)からルート要素を取得し、containsメソッドに渡しています。この場合、$externalNode$domドキュメントに追加されていないため、"ドキュメントはノードを含んでいません"というメッセージが出力されます。

このように、containsメソッドは、あるノードが特定のXMLドキュメントの内部に存在するかどうかを効率的に判定するために利用できます。XMLドキュメントの構造を操作する際に、ノードの存在を確認する基本的な機能を提供します。

DOMDocument::contains()メソッドは、指定されたノードが現在のドキュメントに含まれているかを判定します。重要な点として、$otherに指定するノードは、比較対象のDOMDocumentオブジェクト内に存在している必要があります。別のDOMDocumentオブジェクトから取り出したノードを渡しても、false(含まれていない)と判定されます。サンプルコードでは、$newNode$domに追加された後にcontains()で確認されているためtrueとなりますが、$externalNodeは別の$otherDomに属しているためfalseとなります。ノードが所属するドキュメントを意識して使用することが重要です。ノードが存在するかどうかを確認する前に、ノードが正しいドキュメントに属しているかを確認するようにしてください。