PHP : décompression d’arguments et arguments nommés

Au fil des versions, PHP offre de plus en plus de souplesse pour transmettre des arguments à une fonction. La syntaxe suivante est désormais possible :
Il était temps que je me mette à la page. Du coup, je vous partage ça…
1. Opérateur de décomposition #!php ...
Disponible depuis PHP 5.6, il est aussi appelé splat operator ou unpacking operator. Il permet de faire 2 choses différentes :
1.1 Fonctions variables (variadic functions)
Il peut servir à définir des fonctions variables qui prennent un nombre indéterminé de paramètres :
Les arguments sont accessible sous forme d’un tableau associatif.
1.2 Décompression de tableau
L’opérateur ... peut aussi servir à l’inverse : transmettre à la fonction chaque élément d’un tableau dans des arguments distincts :
Dans le cas présent, ils sont transmis dans l’ordre fourni.
2. Arguments nommés (depuis PHP 8.0)
Dans une syntaxe assez similaire à Python, PHP autorisé désormais à nommer les arguments optionnels.
Cela évite de transmettre inutilement à la main des valeurs par défaut pour des arguments dont on se fout.
3. Arguments nommés & opérateur de décompression
Les deux peuvent être utilisé lors d’un même appel de fonction, et ce de deux manières différentes :
3.1 Utilisés ensemble
L’opérateur de décompression — s’il est utilisé avec un tableau associatif — fera le lien entre les clés du tableau et les noms de variables :
Ici, arg2 et arg4 gardent leurs valeurs par défaut, tandis que arg3 et arg5 récupèrent les valeurs du tableau.
3.2 Utilisés en parallèle
Il est aussi possible d’utiliser les 2 syntaxes au sein d’un même appel :
Pour remettre un peu au clair, voici ce qu’il se passe pour chaque argument :
- argument requis transmis : vaudra 1
- argument facultatif non transmis : vaudra 0
- argument facultatif transmis par tableau associatif (ce qui ciblera l’argument de façon « nommée ») : vaudra 3
- argument facultatif non transmis : vaudra 0
- argument facultatif transmis de façon « nommée » : vaudra 5
3.3 Attention aux doublons
Il ne faut évidemment pas mentionner un même argument 2 fois, au risque de recevoir une Fatal error :
Référence (php.net)
“Keep spreading and code on!”