Mi sento vagamente fesso perché sono sicuro che sia una scemenza, ma al momento mi sfugge il perché di questo comportamento:
Codice PHP:
function prova(&$vett)
{
echo 'Inizio Prova: '.print_r($vett, TRUE)."
";
$vett = &$vett['a'];
$vett = &$vett['a2'];
echo 'Fine Prova: '.print_r($vett, TRUE)."
";
}
$a = array('a' => array('a1' => 5, 'a2' => array('a3' => 10)));
$b = &$a;
echo 'Prima: '.print_r($b, TRUE)."
";
prova($b);
echo 'Dopo: '.print_r($b, TRUE)."
";
Stampa:
Prima: Array ( [a] => Array ( [a1] => 5 [a2] => Array ( [a3] => 10 ) ) )
Inizio Prova: Array ( [a] => Array ( [a1] => 5 [a2] => Array ( [a3] => 10 ) ) )
Fine Prova: Array ( [a3] => 10 )
Dopo: Array ( [a] => Array ( [a1] => 5 [a2] => Array ( [a3] => 10 ) ) )
Essendo il parametro formale di prova() per riferimento, mi aspetterei che il valore di $vett assegnato dentro la funzione impostasse anche quello del parametro attuale $b, invece subito dopo la funzione $b è invariato, pur avendolo passato per riferimento a una funzione che lo modifica. Se dentro prova() gli assegno un valore invece che un altro riferimento tutto funziona come previsto.
Perché? :master: