Déstructuration de listes et de tableaux
Les vrais tableaux sont rarement des listes plates. Ils s’imbriquent, et le plus souvent ils portent des clés plutôt que des positions. La déstructuration épouse la forme des données, quelle que soit cette forme.
Déstructuration imbriquée
Si un tableau contient d’autres tableaux, le motif reproduit cette structure telle quelle :
<?php
$point = [[1, 2], 3];
[[$x, $y], $z] = $point;
echo "x={$x}, y={$y}, z={$z}\n"; // x=1, y=2, z=3
Mettez les deux côtés face à face : [[$x, $y], $z] et [[1, 2], 3]. Le motif est un calque des données. Cette symétrie fait tout l’intérêt. Passé un niveau de profondeur, une chaîne comme $point[0][0] commence à cacher ce que vous cherchez, alors que le motif dit « donne-moi exactement cette forme » en une ligne.
Déstructuration par clé
Les coordonnées viennent par positions. Presque tout le reste de ce que vous déballerez dans une application vient avec des clés : une ligne de base de données, du JSON décodé, un formulaire soumis. Pour ceux-là, nommez les clés :
<?php
$userData = [
'name' => 'Priya',
'age' => 29,
'email' => 'priya@example.com',
];
['name' => $name, 'age' => $age] = $userData;
echo "{$name} is {$age}.\n"; // Priya is 29.
email n’est pas mentionné, donc on n’y touche pas. Vous ne nommez que les clés que vous voulez, et le reste du tableau reste à sa place.
C’est ici que la déstructuration cesse d’être un raccourci et devient plus claire que l’alternative. Une ligne dit « ce code a besoin d’un nom et d’un âge » ; deux lignes de $userData['name'] et $userData['age'] le disent plus lentement.
Clés et imbrication se combinent :
<?php
$response = [
'status' => 'ok',
'user' => ['name' => 'Priya', 'age' => 29],
];
['user' => ['name' => $name, 'age' => $age]] = $response;
echo "{$name}, {$age}\n"; // Priya, 29
Échanger deux variables
La déstructuration a un petit tour de passe-passe très satisfaisant : échanger deux variables sans une troisième pour tenir la valeur en attente.
<?php
$a = 1;
$b = 2;
[$a, $b] = [$b, $a];
echo "a={$a}, b={$b}\n"; // a=2, b=1
PHP construit d’abord le tableau [$b, $a] à droite, ce qui capture les deux valeurs d’origine, et seulement ensuite les reverse dans $a et $b à gauche. Quand $a est écrasé, l’ancienne valeur de $b a déjà été lue. C’est cet ordre qui rend l’échange sûr, et c’est la façon la plus propre d’échanger deux valeurs en PHP : aucune variable $temp nécessaire.
Un mot de prudence
Déstructurez un tableau auquel il manque une clé ou une position que vous avez demandée, et rien n’est levé. L’élément manquant devient null, avec un avertissement si votre configuration de rapport d’erreurs est stricte. Essayez : retirez 'age' de $userData ci-dessus et relancez le fichier.
Warning
La déstructuration reconnaît une forme ; elle ne la vérifie jamais. PHP vous laissera déballer un tableau de trois éléments comme s’il en avait cinq.
Prenez-la pour ce qu’elle est : une commodité pour du code où vous faites déjà confiance à la forme des données. Quand les données viennent de l’extérieur, validez d’abord, déstructurez ensuite.