【PHP8.x】DOMEntityReference::isEqualNode()メソッドの使い方
isEqualNodeメソッドの使い方について、初心者にもわかりやすく解説します。
作成日: 更新日:
基本的な使い方
isEqualNodeメソッドは、現在のノードが、引数で指定された別のノードと等しいかどうかを判定するために実行するメソッドです。ここで言う「等しい」とは、2つのノードがメモリ上で同一のオブジェクトであることを意味するのではなく、ノードの持つプロパティがすべて同じ値であることを指します。具体的には、ノードの型、名前、値、そして保持している属性の集合が完全に一致している必要があります。さらに、この比較は子ノードに対しても再帰的に行われるため、すべての子孫ノードの構造と内容が順序も含めて完全に同一でなければなりません。このため、ドキュメントの特定の部分が構造的に全く同じであるかを確認する際に非常に便利です。2つのノードが同じインスタンスであるかを判定するisSameNodeメソッドとは異なり、isEqualNodeは別々に生成されたノードであっても内容が同一であればtrueを返します。比較の結果、ノードが等しいと判断された場合はtrueを、そうでない場合はfalseを返します。
構文(syntax)
1<?php 2 3$xmlString = <<<XML 4<?xml version="1.0" encoding="utf-8"?> 5<!DOCTYPE root [ 6 <!ENTITY company "My Company"> 7 <!ENTITY product "My Product"> 8]> 9<root> 10 <a>&company;</a> 11 <b>&company;</b> 12 <c>&product;</c> 13</root> 14XML; 15 16$doc = new DOMDocument(); 17$doc->loadXML($xmlString); 18 19// 比較元のDOMEntityReferenceノードを取得 20$node1 = $doc->getElementsByTagName('a')->item(0)->firstChild; 21 22// 比較対象のDOMEntityReferenceノードを取得 23$node2 = $doc->getElementsByTagName('b')->item(0)->firstChild; // node1と等しい 24$node3 = $doc->getElementsByTagName('c')->item(0)->firstChild; // node1と異なる 25 26// ノードが等しいか比較します 27// public function isEqualNode(?DOMNode $otherNode): bool 28 29// true: $node1と$node2は同じエンティティ (&company;) を参照しているため 30$result1 = $node1->isEqualNode($node2); 31var_dump($result1); 32 33// false: $node1と$node3は異なるエンティティを参照しているため 34$result2 = $node1->isEqualNode($node3); 35var_dump($result2); 36 37// false: ノードの型が異なるため (DOMEntityReferenceとDOMElement) 38$result3 = $node1->isEqualNode($doc->documentElement); 39var_dump($result3); 40 41?>
引数(parameters)
?DOMNode $otherNode
- ?DOMNode $otherNode: 比較対象となるDOMNodeオブジェクト
戻り値(return)
bool
DOMEntityReferenceオブジェクトが、指定されたノードと同一である場合に true を、そうでない場合に false を返します。