以下のクラスを使用して xml ファイルを生成しようとしています。深さの制約なしで配列データが渡されると、以下のコードによって xml が正常に生成されます。self::createNode($value, $child);
ステートメントがどのように機能し、新しいオブジェクトを作成するのかを理解しようとして いますか? parent::_construct
クラスコンストラクターのステートメントの意味は何ですか? エンコーディングは子クラスのコンストラクターで既に初期化されているためです。self キーワードについて私が読んだことは、静的メソッドを呼び出すために使用されるということですが、ここでは createNode メソッドは静的ではありません。このステートメントのコンテキストを理解するために誰かが私を助けることができますか?ここで言えることは、DomDocument クラスには createNode メソッドがまったくないということです。誰か助けてくれませんか?どうもありがとうございました。
class array2xml extends DomDocument
{
public $nodeName;
private $xpath;
private $root;
private $node_name;
public $xml_data;
public function __construct($root='root', $node_name='node')
{
parent::__construct();
$this->encoding = "UTF-8";
$this->formatOutput = true;
$this->node_name = $node_name;
$this->root = $this->appendChild($this->createElement($root));
$this->xpath = new DomXPath($this);
}
public function createNode( $arr, $node = null)
{
if (is_null($node))
{
$node = $this->root;
}
foreach($arr as $element => $value)
{
$element = is_numeric( $element )
? $this->node_name
: $element;
$element = htmlspecialchars($element,ENT_QUOTES,'UTF-8');
$child = $this->createElement($element, (is_array($value)
? null
: htmlspecialchars($value,ENT_QUOTES,'UTF-8')));
$node->appendChild($child);
if (is_array($value))
{
self::createNode($value, $child);
}
}
}
public function __toString()
{
$this->xml_data= $this->saveXML();
return $this->saveXML();
}
}