Il costrutto list()
consente di assegnare ad un numero arbitrario di variabili il contenuto di un array. Vediamo un esempio base preso dalla documentazione ufficiale:
<?php
$array = ['coffee', 'brown', 'caffeine'];
list($drink, $color, $power) = $array;
echo "$drink is $color and $power makes it special.\n";
Dall'esempio abbiamo notato che le variabili $drink
, $color
e $power
sono state valorizzate automaticamente dal contenuto dell'array.
Il comportamento base del costrutto non varia con la versione 7.x di PHP. Quello che è stato aggiunto, invece, è il supporto all'assegnamento di un valore ad una variabile per riferimento. Prima di vedere in dettaglio di cosa si tratta diamo una breve definizione di assegnamento per riferimento.
Assegnamento per riferimento in PHP
Per chi ha esperienza con il linguaggio C potremmo definire le references
di PHP come i puntatori nel C.
Generalmente l'assegnamento di un valore ad una variabile avviene per valore che, in altri termini, significa che viene copiato quel valore all'interno della variabile. Assegnare un valore per riferimento, invece, significa far puntare la variabile al contenuto di un'altra. Vediamo un esempio per chiarire il concetto:
Assegnamento per valore
//modificando il valore di $a, il contenuto della variabile $b resta invariato
$a = 3;
$b = $a;
$a++;
echo "$a - $b"; //stamperà 4 - 3
Assegnamento per riferimento
//modificando il valore di $a, il contenuto di $b verrà modificato e viceversa
$a = 3;
$b = &$a;
$a++;
echo "$a - $b"; //stamperà 4 - 4
Assegnamento per riferimento in list()
PHP 7.x consente di assegnare per riferimento i valori alle variabili. La differenza, rispetto al comportamento normale, consiste nella possibilità di modificare il contenuto della variabile al variare del contenuto dell'array. Vediamo anche qui un esempio per chiarire la differenza:
Assegnamento per valore
//modificando il valore nell'array, il contenuto della variabile non cambia
$array = ['coffee', 'brown', 'caffeine'];
list($drink, $color, $power) = $array;
$array[1] = 'red';
echo $color; //stamperà brown
Assegnamento per riferimento
//modificando il valore nell'array, il contenuto della variabile cambierà con esso
$array = ['coffee', 'brown', 'caffeine'];
list($drink, &$color, $power) = $array;
$array[1] = 'red';
echo $color; //stamperà red
L'unica differenza nei due esempi è l'utilizzo della keyword &
all'interno del costrutto list()
nella variabile $color
.