Newsgroup: it.comp.www.php
Titolo: newbie - esecitazione variabili per riferimento

Sto cercando di passare dei valori da variabile a variabile per riferimento. 
In particolare ho un array:
<?php
$arr = array(array(1),array(2),array(3));
// Creo un subarray per riferimento
$sub = &$arr[0];
// do un valore all'elemento dell'array
$sub[0] = 100;
// adesso anche $arr[0][0] dovrebbe contenere 100
echo <<<MET
// qui visualizzo correttamente il valore del subarray
\$sub[0] = $sub[0]<br />
// qui dovrei visualizzare lo stesso valore di subarray ma ci sono dei 
problemi.
\$arr[0][0] = $arr[0][0]<br />
MET;
?>
Cosa sbaglio?

 \$arr[0][0] = $arr[0][0]<br />
Ho risolto così:
echo "\$arr[0][0] = ".$arr[0][0];
però non capisco perché non funzioni l'altro esempio.
Ho provato anche:
echo "\$arr[0][0] = $arr[0][0]";
che non funziona. L'interprete ha difficoltà ad interpretare gli array 
dentro un echo?
ciao Sirdalud 

 Cosa sbaglio?
nel modo in cui stampi le variabili
\$arr[0][0] = {$arr[0][0]}<br />
ma ancora meglio non usare la sintassi heredoc

 ma ancora meglio non usare la sintassi heredoc
Ok, quindi si applica l'espansione complessa di variabile. Ma perché php 
tronca $arr[0][0]? Legge soltanto fino a $arr[0]
infatti questo funziona:
$arr[0]
e questo no:
$arr[0][0]
a prescindere che si sia in una sintassi heredoc o un echo con comuni doppie 
virgolette. Php non dovrebbe continuare ad interpretare la variabile (in 
questo caso l'array) fino al termine dell'ultima parentesi quadra? So che 
usare {$variabile} evita ambiguità, ma non capisco dovbe sta l'ambiguità in 
$arr[0][0]
ciao Sirdalud 



la soluzione sta sempre nel solito posto, il manuale:
http://www.php.net/manual/en/
language.types.string.php#language.types.string.syntax.heredoc
Heredoc text behaves just like a double-quoted string , without the 
double quotes. This means that quotes in a heredoc do not need to be 
escaped, but the escape codes listed above can still be used. Variables 
are expanded, but the same care must be taken when expressing complex 
variables inside a heredoc as with string s. 

 variables inside a heredoc as with string s.
Che provo a tradurre:
Il testo nella sintassi Heredoc si comporta come una stringa con virgolette 
doppie, senza i
doppi apici. Ciò significa che le virgolette in un Heredoc non hanno bisogno 
di essere
trattate con escape, ma i codici di escape sopra elencati possono essere 
ancora utilizzati. Le variabili
sono espanse, ma la stessa cura deve essere presa quando si esprimono 
variabili complesse
all'interno di una Heredoc come con stringa s.
Innanzitutto non ho capito quello - stringa s - in fondo al discorso... è un 
errore ortografico o cosa?
So che si usa {} in casi come questo:
$stringa = "cookie";
echo "Cookie al plurale si scrive {$stringa}s e non $stringas perchè php 
intepreta la stringa \$stringas e non \$stringa e "\s\" finale".
Comunque il problema di interpretazione che ho sollevato non è solo della 
sintassi di heredoc ma anche di un comune echo con doppi apici, infatti:
$arr = array(array(1),array(2),array(3));
$sub = $arr[0];
echo "
\$arr = $var_dump($arr[0][0])<br>
\$sub = $var_dump($sub[0]);
";
dà lo stesso problema.
Purtroppo non sono riuscito poi a capire bene l'esempio #2 riportato sotto 
il testo che hai citato, perché ci sono degli argomenti che non ho ancora 
avuto modo di studiare e quindi ancora non li conosco, tipo "class", 
"$this->foo", "$foo->bar[1]". Infatti quello è un manuale per chi già 
conosce il php, io invece sto studiando paragrafo per paragrafo, capito per 
capitolo su un libro che affronta gli argomenti in modo didattico, come è 
giusto che sia per chi deve imparare.
ciao Sirdalud