【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 を返します。