0

以下のクラスを使用して 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();
    }
}
4

1 に答える 1

1

PHPでは、self 常に実行されたクラスを指しselfます。したがって、あなたの場合self、クラス内のメソッドを参照しますarray2xml

通常、メソッドselfを呼び出すために使用されますstatic。あなたの場合、によって呼び出されるメソッドは静的ではないので、代わりselfに使用する方がよいでしょう。$this

ここでparent、常に「親」クラスからメソッドを呼び出します。したがって、拡張されるクラス。この場合も、が呼び出されると、クラスparent::some function()内でそのメソッドが検索されます。DomDocumentそれが「親」(拡張)クラスだからです。

parent::__construct()クラスのコンストラクターで呼び出される理由は、独自のクラスも。を使用している場合array2xml、拡張クラスのコンストラクターが自動的に呼び出されること__construct()はないためです。クラスにがない場合を除きます__construct()。その場合にのみ、PHPは__construct()親クラスのを呼び出します。それ以外の場合は、独自のコンストラクターから手動で呼び出す必要があります。

于 2013-01-02T10:18:34.173 に答える