Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

【PHP8.x】Dom\Entity::cloneNode()メソッドの使い方

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

作成日: 更新日:

基本的な使い方

『cloneNodeメソッドは、呼び出し元であるDom\Entityオブジェクトの複製を作成するメソッドです。このメソッドは、XMLドキュメント内のエンティティ(実体)を表すノードをコピーし、新しいノードとして生成する際に使用します。引数としてbool型の値を渡すことができ、trueを指定するとノードとその子孫をすべて再帰的に複製するディープクローンを、falseを指定するか省略した場合はノード自身のみを複製するシャロークローンを実行します。しかし、Dom\Entityノードは仕様上子ノードを持つことができないため、このメソッドにおいて引数の値は複製結果に影響を与えません。どちらの場合も、エンティティノード自体が複製されます。メソッドの実行が成功すると、複製された新しいDom\Nodeオブジェクトが返されます。複製されたノードは、元のドキュメントツリーには属しておらず、親ノードを持たない独立した状態です。そのため、ドキュメントに組み込むにはappendChildなどのメソッドを別途呼び出す必要があります。もし何らかの理由で複製に失敗した場合は、falseが返されます。』

構文(syntax)

1<?php
2
3$xml = '<!DOCTYPE doc [<!ENTITY greeting "Hello">]><doc/>';
4$document = new DOMDocument();
5$document->loadXML($xml);
6
7// 複製元のエンティティノードを取得
8$originalEntity = $document->doctype->entities->getNamedItem('greeting');
9
10// エンティティノードのコピーを作成する
11// 引数に true を指定すると、再帰的に子孫もすべてコピーします
12$clonedEntity = $originalEntity->cloneNode(true);
13
14// 複製されたノードの名前を出力
15echo $clonedEntity->nodeName;

引数(parameters)

bool $deep = false

  • bool $deep = false: trueを指定すると、ノードとそのすべての子孫ノードが複製されます。falseを指定すると、ノードのみが複製され、子ノードは複製されません。

戻り値(return)

Dom\Node|false

指定された Dom\Entity オブジェクトのノードのディープコピーを返します。コピーに失敗した場合は false を返します。

関連コンテンツ

関連プログラミング言語