【PHP8.x】cloneNodeメソッドの使い方
cloneNodeメソッドの使い方について、初心者にもわかりやすく解説します。
基本的な使い方
cloneNodeメソッドは、DOMNodeオブジェクトを複製するメソッドです。このメソッドは、呼び出し元のDOMNodeオブジェクトと同じ型とプロパティ(ノード名、ノード値、属性など)を持つ新しいノードを作成し、返します。
このメソッドはオプションのブール型引数$deepを受け取ります。$deepにtrueを指定すると、元のノードだけでなく、そのすべての子ノード(さらにその子ノードも含む、いわゆるサブツリー全体)も再帰的に複製されます。これにより、元のDOM構造を完全に保ったまま、新しい独立したツリーを作成することができます。一方、$deepにfalseまたは何も指定しない場合、元のノード自身のみが複製され、その子ノードは複製されません。この場合、新しく作成されるノードは子ノードを持たない状態となります。
複製されたノードは、元のDOMツリーに属さず、独立した新しいオブジェクトとして扱われます。ウェブページに表示したり操作したりするには、複製されたノードを既存のDOMツリーのどこかに追加する必要があります。複製元のノードにID属性が付与されていた場合、複製されたノードのIDは元のノードと同じになるため、DOMの規則に従い、手動で新しい一意なIDを設定し直すことが推奨されます。また、元のノードにアタッチされていたイベントリスナーは複製されないため、必要に応じて再度設定する必要があります。このメソッドは、テンプレートから要素を生成したり、既存の要素を再利用したりする際に非常に有用です。
構文(syntax)
1<?php 2$dom = new DOMDocument(); 3$originalNode = $dom->createElement('parent'); 4$childNode = $dom->createElement('child'); 5$originalNode->appendChild($childNode); 6 7$clonedNode = $originalNode->cloneNode(true); 8?>
引数(parameters)
bool $deep = false
- bool $deep = false: trueを指定すると、ノードとそのすべての子孫ノードが複製されます。falseを指定すると、ノードのみが複製され、子ノードは複製されません。
戻り値(return)
DOMNode
このメソッドは、呼び出し元のDOMNodeオブジェクトのディープコピー(子要素や属性もすべて複製)された新しいDOMNodeオブジェクトを返します。