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

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

作成日: 更新日:

基本的な使い方

containsメソッドは、PHPのDOM拡張機能において、DOMDocumentFragmentオブジェクトが特定のDOMNodeをその子孫として含んでいるかどうかを確認するメソッドです。DOMDocumentFragmentとは、Webページなどのドキュメント構造を表現するDOM(Document Object Model)を操作する際に使用される、複数のノードを一時的にまとめておくための軽量なコンテナです。このメソッドは、引数として検証したいDOMNodeオブジェクトを一つ受け取ります。そして、このDOMDocumentFragmentオブジェクトが、指定されたDOMNodeを自身の内部に、直接の子ノードとして、あるいはさらにその子孫ノードとして持っている場合にtrueを返します。もし含まれていない場合はfalseを返します。

この機能は、特に動的にHTML要素などを構築し、それを最終的なドキュメントツリーに追加する前に、特定の要素がその一時的な集合体の一部であるかを確認したい場合に非常に有用です。例えば、ユーザーの操作に応じて多数の要素をDOMDocumentFragment内で準備している際に、あるイベントが発生したDOMNodeが、現在処理中のフラグメント内に存在するかどうかを効率的に判定することができます。これにより、複雑なDOM操作におけるノードの所属関係を明確にし、プログラムの正確性を高めることに貢献します。このメソッドを使うことで、手動でノードを辿っていく必要がなくなり、コードを簡潔に保ちながらも、DOMツリー内でのノードの包含関係を確実に把握することが可能になります。

構文(syntax)

1<?php
2
3$fragment = new DOMDocumentFragment();
4$nodeToCheck = new DOMElement('p');
5$fragment->append($nodeToCheck);
6
7$isContained = $fragment->contains($nodeToCheck); // 指定されたノードが含まれているかチェック
8
9?>

引数(parameters)

引数なし

引数はありません

戻り値(return)

bool

指定されたノードがこのDOMDocumentFragmentに含まれているかどうかを示す真偽値を返します。trueであれば含まれており、falseであれば含まれていません。

サンプルコード

DOMDocumentFragment::contains()でノードの包含を確認する

1<?php
2
3// DOMDocumentFragment::contains() のサンプルコード
4
5// DOMDocumentFragment を作成
6$dom = new DOMDocument();
7$fragment = $dom->createDocumentFragment();
8$fragment->appendXML('<root><child>text</child></root>');
9
10// 子ノードを作成
11$child = $dom->createElement('newChild');
12$fragment->firstChild->appendChild($child);
13
14
15// contains() メソッドを使用して、子ノードが含まれているか確認
16$containsChild = $fragment->contains($child);
17
18// 結果を出力
19var_dump($containsChild); // bool(true)
20
21// 存在しないノードを検証
22$notExistNode = $dom->createElement('notExist');
23$containsNotExistNode = $fragment->contains($notExistNode);
24
25//結果を出力
26var_dump($containsNotExistNode); // bool(false)

このサンプルコードは、PHPのDOMDocumentFragmentクラスにおけるcontains()メソッドの動作を理解するためのものです。contains()メソッドは、DOMDocumentFragmentが指定されたノードを含んでいるかどうかをチェックし、その結果を真偽値(bool)で返します。引数は不要で、ノードの存在確認のみを行います。

まず、DOMDocumentFragmentオブジェクトを作成し、appendXML()メソッドを使ってXML構造を追加します。次に、createElement()メソッドで新しい要素(ノード)を作成し、作成したDocumentFragmentの子要素として追加しています。

contains()メソッドは、この新しく追加したノードがDocumentFragmentに含まれているかを検証するために使用されます。サンプルコードでは、$containsChild = $fragment->contains($child);という行で、作成した$childノードが$fragmentに含まれているかを判定しています。この場合、$child$fragmentの子ノードとして追加されているため、contains()メソッドはtrueを返します。

次に、DocumentFragmentに存在しないノードに対してcontains()メソッドを実行しています。$notExistNodeはDocumentFragmentに追加されていないため、$fragment->contains($notExistNode)falseを返します。

このように、contains()メソッドを使用することで、特定のノードがDOMDocumentFragment内に存在するかどうかを簡単に確認できます。DOM操作を行う際に、ノードの存在確認を行うことで、予期せぬエラーを防ぐことができます。

DOMDocumentFragment::contains()は、DOMDocumentFragmentが指定されたノードを含んでいるかどうかを判定します。引数にはDOMNodeオブジェクトを渡します。サンプルコードでは、$fragmentに追加された$childノードの存在確認がtrue、存在しない$notExistNodeの確認がfalseとなることを示しています。注意点として、contains()メソッドは、ノードオブジェクトそのものを比較するため、同じ内容のノードを新たに作成してもfalseを返すことがあります。ノードが同一であるかを確認するには、isSameNode()メソッドも検討してください。また、PHP8以降で利用可能です。

PHP DOMDocumentFragment::contains で要素の包含を確認する

1<?php
2
3// DOMDocumentFragment::contains の使用例
4
5// ドキュメントとフラグメントを作成
6$dom = new DOMDocument();
7$fragment = $dom->createDocumentFragment();
8
9// フラグメントに要素を追加
10$element = $dom->createElement('div');
11$fragment->appendChild($element);
12
13// フラグメントが要素を含んでいるか確認
14$contains = $fragment->contains($element);
15
16// 結果を出力
17if ($contains) {
18    echo "フラグメントは要素を含んでいます。\n";
19} else {
20    echo "フラグメントは要素を含んでいません。\n";
21}
22
23// フラグメントが別の要素を含んでいるか確認 (含まれていない例)
24$anotherElement = $dom->createElement('p');
25$containsAnother = $fragment->contains($anotherElement);
26
27// 結果を出力
28if ($containsAnother) {
29    echo "フラグメントは別の要素を含んでいます。\n";
30} else {
31    echo "フラグメントは別の要素を含んでいません。\n";
32}
33?>

PHP 8 の DOMDocumentFragment::contains メソッドは、DOMDocumentFragment オブジェクトが指定されたノード(要素)を含んでいるかどうかを判定するメソッドです。引数はなく、戻り値は boolean 型です。

このサンプルコードでは、まず DOMDocument オブジェクトと DOMDocumentFragment オブジェクトを生成します。次に、DOMDocumentFragment オブジェクトに createElement メソッドで作成した div 要素を追加します。

$fragment->contains($element) を実行することで、$fragment$element を含んでいるか確認できます。contains メソッドは、指定されたノードがフラグメント内に存在する場合 true を、存在しない場合 false を返します。

サンプルコードでは、最初に $fragment に追加した $element が含まれているかを contains メソッドで確認し、結果を出力します。次に、$fragment に追加していない別の要素 $anotherElement が含まれているかを同様に確認し、結果を出力します。この例では $element は含まれているため true が返り、「フラグメントは要素を含んでいます。」と表示されます。一方、$anotherElement は含まれていないため false が返り、「フラグメントは別の要素を含んでいません。」と表示されます。

DOMDocumentFragment::contains メソッドは、DOM ツリーの一部を操作する際に、特定の要素がフラグメント内に存在するかどうかを効率的に判断するために利用できます。

DOMDocumentFragment::contains()は、DOMDocumentFragmentが指定されたノードを含んでいるかどうかをチェックする関数です。引数は不要で、真偽値を返します。サンプルコードでは$elementがフラグメントに追加されているため、contains($element)trueを返します。一方、$anotherElementはフラグメントに追加されていないため、contains($anotherElement)falseを返します。この関数を使用する際は、比較対象のノードが同じDOMDocumentから生成されていることを確認してください。異なるDOMDocumentから生成されたノードを比較すると、意図しない結果になる可能性があります。

関連コンテンツ

関連プログラミング言語