Prima del rilascio di PHP 7.1 era possibile destrutturare un array passandolo innanzitutto come valore associato ad una chiamata della funzione list()
, quindi attraverso un'assegnazione, per poi estrarre le informazioni relative alle variabili utilizzate come argomenti di quest'ultima. In sostanza era (ed è ancora) possibile utilizzare una sintassi come la seguente:
list($x, $y, $z) = [4, 8, 16];
var_dump($x, $y, $z);
L'esecuzione dell'espressione mostrata in esempio porta alla generazione del seguente output indipendentemente dalla release di PHP utilizzata:
int(4)
int(8)
int(16)
Il problema si presentava però nel momento in cui lo sviluppatore tentava di specificare delle chiavi per l'estrazione introducendo degli indici:
list($x, $y, $z) = ["x" => 4, "y" => 8, "z" => 16];
var_dump($x, $y, $z);
In questo caso infatti abbiamo un output come il seguente, sempre indipendentemente dalla versione di PHP utilizzata nel proprio ambiente di sviluppo:
NULL
NULL
NULL
PHP 7.1 risolve questa problematica tramite l'introduzione di una nuova modalità di destrutturazione basata su una doppia associazione delle chiavi, sia a carico delle variabili passate come parametri a list()
che ai valori della variabile:
list("x" => $x, "y" => $y, "z" => $z) = ["x" => 4, "y" => 8, "z" => 16];
var_dump($x, $y, $z);
/*
int(4)
int(8)
int(16)
*/
Considerando che una soluzione del genere potrebbe essere utilizzata frequentemente, si è quindi deciso di introdurre una sintassi più breve che consente di omettere il passaggio delle coppie chiave/variabile alla funzione list()
:
["x" => $x, "y" => $y, "z" => $z] = ["x" => 4, "y" => 8, "z" => 16];
var_dump($x, $y, $z);
/*
int(4)
int(8)
int(16)
*/
Stesso discorso per quanto riguarda gli array multidimensionali:
[[$w, $x], [$y, $z]] = [[4, 8], [16, 32]];
var_dump($w, $x, $y, $z);
/*
int(4)
int(8)
int(16)
int(32)
*/
Anche in questo caso infatti non sarà necessario ricorrere esplicitamente alla funzione list()
per la destrutturazione dell'array multidimensionale e di quelli che lo compongono.