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

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

作成日: 更新日:

基本的な使い方

cloneNodeメソッドは、DOMNodeオブジェクトを複製するメソッドです。このメソッドは、呼び出し元のDOMNodeオブジェクトと同じ型とプロパティ(ノード名、ノード値、属性など)を持つ新しいノードを作成し、返します。

このメソッドはオプションのブール型引数$deepを受け取ります。$deeptrueを指定すると、元のノードだけでなく、そのすべての子ノード(さらにその子ノードも含む、いわゆるサブツリー全体)も再帰的に複製されます。これにより、元のDOM構造を完全に保ったまま、新しい独立したツリーを作成することができます。一方、$deepfalseまたは何も指定しない場合、元のノード自身のみが複製され、その子ノードは複製されません。この場合、新しく作成されるノードは子ノードを持たない状態となります。

複製されたノードは、元の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オブジェクトを返します。

【PHP8.x】cloneNodeメソッドの使い方 | いっしー@Webエンジニア