Я пытался понять, как 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 между функциями без необходимости объявлять его как глобальный? Я знаю, что странно спрашивать о чем-то, что работает, но мне нужно обдумать это: -)
Спасибо