Petit rappel sur les arguments des fonctions

N’importe quel développeur PHP utilise les fonctions pour découper son code en bloc réutilisable. Les arguments sont les variables qui sont envoyées au moment de l’appel d’une fonction pour faire passer des informations à cette dernière. En fonction des arguments envoyés, la fonction traitera la demande d’une façon différente. Pour tester la bonne programmation des fonctions, on peut réaliser des tests unitaires ce qui permet à un développeur de vérifier que la fonction répond bien à toutes les demandes suivant les arguments envoyés.

Les arguments nommés sont implémentés dans de nombreux langages de programmation comme le C#, Python ou même des posts-processeurs comme SASS. Une des nouveautés de PHP 8 qui rattrape son retard par rapport à d’autres langages de programmation c’est donc les arguments nommés. C’est une fonctionnalité facultative et qui peut très bien être combinée avec les arguments positionnels.

En PHP les arguments nommés facilitent l'appel des fonctions
Les arguments nommés facilitent l’appel des fonctions

Appeler des fonctions d’une façon plus simple

Cette nouvelle fonctionnalité clarifie beaucoup l’appel d’une fonction, car nous ne sommes plus obligés de respecter l’ordre des arguments. En PHP 7 il fallait déclarer les arguments obligatoires en premier et les facultatifs à la suite en respectant l’ordre. Depuis PHP 8 il est possible d’appeler directement un argument via le nom dans l’appel de la fonction ce qui simplifie le développement.

Prenons l’exemple d’une simple fonction helloWord qui affiche « hello word » sans définir d’arguments :

<?php
function helloWord(string $arg1 = 'hello', string $arg2 = 'word'):void {
    echo $arg1 . ' ' . $arg2 . '<br>';
}
helloWord(); // hello word

En PHP 7 si un développeur web souhaite modifier $arg2 il doit obligatoirement déclarer $arg1 dans son appel sinon cela ne fonctionne tout simplement pas. Mais depuis PHP 8 il est possible appeler directement $arg2 sans avoir besoin de déclarer les premiers arguments de la fonction. Il n’est plus nécessaire de respecter l’ordre des arguments qui sont appelé par la définition de la fonction.

<?php
function helloWord(string $arg1 = 'hello', string $arg2 = 'word'):void {
    echo $arg1 . ' ' . $arg2 . '<br>';
}
helloWord(arg2:'function'); // hello function

Les changements au niveau de l’interpréteur

Ce nouveau principe facilite l’utilisation des arguments dans les fonctions pour les développeurs PHP, mais il nécessite quelques règles à respecter. Pour fonctionner correctement, les arguments nommés doivent être obligatoirement définis après ceux positionnés. Cette particularité est surtout utile si on a beaucoup d’arguments déclarés dans la fonction.

<?php
function helloWord(string $arg1 = 'hello', string $arg2 = 'word'):void {
    echo $arg1 . ' ' . $arg2 . '<br>';
}
helloWord(arg1:'hi', 'function'); // fatal error
helloWord('hi', arg2: 'function'); // hi function

Le dernier changement au niveau de l’interpréteur concerne la famille des 3 fonctions func_num_args, func_get_args et func_get_arg. Ces 3 fonctions permettent de gérer les arguments passés dans une fonction. Il faut faire attention de bien comprendre l’impact des arguments nommés sur les anciennes fonctions de PHP . En effet en utilisant les arguments nommés ces fonctions réagissent différemment et renvoient maintenant les valeurs par défaut des arguments précédents :

<?php
function helloWord(string $arg1 = 'hello', string $arg2 = 'word'):void {
    var_dump(func_num_args(), func_get_args());
}
helloWord(); // int(0) array(0) { }
helloWord('hi'); // int(1) array(1) { [0]=> string(2) "hi" }
helloWord(arg2: 'function'); // int(2) array(2) { [0]=> string(5) "hello" [1]=> string(8) "function" }

PHP un langage en constante évolution

Les arguments nommés sont donc une excellente nouvelle fonctionnalité implémentée dans la dernière version majeure de PHP. Ceci permettra aux développeurs web d’écrire du code plus simple à maintenir et plus clair. La dernière version de PHP incorpore de nombreuses nouvelles fonctionnalités comme les attributs, l’expression match ou encore l’initialisation des propriétés d’une classe directement dans le constructeur. Les développeurs PHP ont encore beaucoup de travail pour adapter et optimiser leurs codes à toutes ces nouveautés.

En plus d’apporter de nouvelles fonctionnalités, les versions majeures de PHP sont beaucoup plus optimisées et s’exécutent plus rapidement au niveau serveur. Il est donc important de bien mettre à jour son environnement pour avoir des réponses serveur plus rapides et augmenter la vitesse de chargement du site.