PHP SimpleXML DOM işlevleri arasında kullanıyor

2 Cevap php

Ben fonksiyonları arasında nasıl SimpleXML ve dom güncellemeler XML etrafında başımı almak için çalışıyorlar. I sormak nedeni ben yazdım kod çalışır gibi görünüyor, ama bana küresel gibi bir şey ilan ve bu does neden olarak biraz karıştı im kalmadan olmasıdır.

Örneğin, ben bu (basitleştirilmiş) kodu vardır:

<?

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;
}

?>

Bana XML küresel olarak ilan gerek kalmadan fonksiyonları arasında güncellenmektedir anlamanıza yardım edebilir misiniz? Ben çalışır bir şey sormak garip görünüyor biliyorum, ama ben :-) etrafında başımı almak gerekiyor

Teşekkürler

2 Cevap

Eğer fonksiyonların her biri aracılığıyla bir nesnenin örneğinin bir kopyasını geçiyoruz.

Bunu global ilan karşı işlevlerden her bir nesnenin sharing aynı örneği olarak parametre geçişi düşünebilirsiniz.

Sen değilsin: Eğer sadece $ ürün (ya da diğer var) saklanan düğümleri geçen düşünüyorum. Seçilen bir nodeset hakkında ayarlamak bazı parametreler ile, orijinal nesneyi geçiyoruz.