The difference has nothing to do with loops or links, but with what exactly means =in each case.
The first version can be simplified:
$value = $xml->Data->Value;
$value = 1;
, , . , $xml .
:
$data = $xml->Data;
$data->Value = 1;
, , , - . SimpleXML libxml XML . , $data->setValueOfChild('Value', 1);.
, :
$value =& $xml->Data->Value;
$value = 1;
$value , 1 . , , SimpleXML.
, : , SimpleXMLElement , $foo->NameThatOccursMoreThanOnce[3] $some_element['Attribute']. , :
$value = $xml->Data->Value;
$value[0] = 1;
$value - SimpleXMLElement, $value[0] = 1 - $value->setValueOfItem(0, 1).
, <Value> <Data>; , , [0] , :
$value = $xml->Data->Value[0];
$value[0] = 1;
, , ! __get, __set __unset , ArrayAccess.