list($x, $y, $z) = [4, 8, 16]; var_dump($x, $y, $z);
L’avviamento dell’espressione mostrata in modello porta alla generazione del seguente output indipendentemente dalla release di PHP utilizzata:
int(4) int(8) int(16)
Il bug 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 modello 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 obbligazioni 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 sicuro 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 orazione 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.