1


0

関数間で使用するPHP SimpleXML DOM

私はどのように周りの機能間のSimpleXMLとDOMの更新XMLを私の頭を取得しようとしています。 私が尋ねる理由は、私が書いたコードが動作しているようですが、私はそれがこれを行う理由として混乱少しをグローバルとして何かを宣言し、イムしなくても、ということです。

たとえば、私はこの(簡略化された)コードを持っています:

<?

foreach ($filenames as $filename) {
    $xml = simplexml_load_file($filename);
    updateXml($xml);
    $xml->last_update = date('Y-m-d H:i:s');
    $xml->asXML($filename);
}

function updateXml($xml) {
    //...
    if ($data = $xml->xpath('//data/info[product_id="' . $product_data['id'] . '"]')) {
        $parent = $data[0]->xpath("parent::*");
        $data = updateItem($parent[0], $product_data);
    } else {
        $product = addItem($xml->products, $product_data['id']);
        $data = updateItem($product, $product_data);
    }
}

function updateItem($parent, $product_data) {

    $node = dom_import_simplexml($parent);
    $dom = $node->ownerDocument;

    $product = $dom->createElement('product');
    $node->appendChild($product);
    $item = $dom->createElement('id', $product_data['id']);
    $product->appendChild($item);
    $item = $dom->createElement('name', $product_data['name']);
    $product->appendChild($item);
    $item = $dom->createElement('url');
    $product->appendChild($item);
    $cdata = $dom->createCDATASection($product_data['url']);
    $item->appendChild($cdata);
    $item = $dom->createElement('price', $product_data['price']);
    $product->appendChild($item);

    return $node;
}

?>

あなたは私はXMLがグローバルとして宣言することなく、機能間更新されている方法を理解していただけますか? 私は動作する何かを尋ねるために奇妙に思えるけど、私はそれのまわりで私の頭を取得する必要があります:-)

ありがとう

2 Answer


1


各関数を介してオブジェクトのインスタンスのコピーを渡します。

パラメータを「グローバル」と宣言するのではなく、各関数にオブジェクトの同じインスタンスを「共有」することを考えることができます。


0


$ product(または他の変数)に保存したノードだけを渡すと思います:そうではありません。 選択したノードセットに関して設定されたいくつかのパラメーターを使用して、元のオブジェクトを渡します。