Faire le quiz close

L'opérateur ternaire et l'opérateur de fusion null en PHP

#1 Préambule open

Pour tester les deux opérateurs que l'on va voir dans ce tuto, je vais choisir un cas de figure dans lequel on les trouve très souvent. Le cas de figure, c'est celui dans lequel on passe des informations dans une Url.

On fait un exemple, pour ça je crée un dossier Test sur bureau, je crée un fichier index.php dedans, j'ouvre VSCode sur le dossier Test pour en faire mon espace de travail. Dans le terminal VSCode, je lance le serveur PHP avec la commande php -S localhost:3000. Dans index.php, j'insère une structure HTML minimale avec l'abréviation Emmet !+TAB.

Lorsque l'on passe des informations dans l'Url, ce que l'on fait, c'est que l'on place des couples nom=valeur à la fin de l'Url. Ces couples constituent ce que l'on appelle une query string. Ici, je vais mettre le couple ident=toto. Dans ces conditions, je dois retrouver la valeur toto dans le tableau $_GET à la clé 'ident'.

  1. Si l'information est dans l'Url, alors tout va bien. L'echo affiche toto.
    L'information est dans l'Url
  2. Si l'information n'est pas dans l'Url, alors j'ai un warning. Le warning, c'est juste un message. L'exécution du script n'est pas interrompue.
    L'information n'est pas dans l'Url

Le besoin que l'on a, c'est de récupérer l'information lorsqu'elle y est et de mettre une valeur par défaut lorsqu'elle n'y est pas. On va voir comment les deux opérateurs qui suivent permette de couvrir ce besoin.

#2 Opérateur ternaire ?: open

L'opérateur ternaire ?: est construit au moyen de trois opérandes, d'où son nom. Le premier opérande est évalué comme un booléen. Ca peut être une condition, ça peut être une expression. Si ce booléen est true c'est la première valeur (* après le ?) qui est retournée, sinon c'est la deuxième (* après le :).

Ci-dessous, j'affecte la valeur retournée par l'opérateur ternaire à la variable $x.

Ci-dessous, j'utilise la fonction isset() pour savoir si l'information ?ident=valeur est présente dans l'URL.

  • Si l'information est présente (* http://localhost:3000?ident=toto), alors isset($_GET['ident']) retourne true et le ternaire retourne la valeur qu'il y a dans $_GET['ident'] soit toto.
  • Si l'information n'est pas présente (* http://localhost:3000), alors isset($_GET['ident']) retourne false et le ternaire retourne la valeur 'Aucun'.

#3 Opérateur de fusion null ?? open

L'opérateur de fusion null ?? s'appelle aussi l'opérateur de coalescence null. Grosso modo, coalescence veut dire fusion.

C'est un opérateur à deux opérandes. L'opérateur de fusion null renvoie l'opérande de gauche s'il est défini ET non null, sinon il renvoie l'opérande de droite.

Je peux remplacer l'opérateur ternaire de l'exemple précédent par un opérateur de fusion null. C'est encore plus concis 😎. Attention, ça ne veut pas dire qu'on fait exactement la même chose. Dans notre cas, $_GET['ident'] ne peut pas être null. C'est pour ça que ça revient au même.

Ce que vous pouvez rencontrer aussi, c'est un opérateur d'affectation composé avec une fusion ??=. Ci-dessous la variable $a sera affectée à 'defaut' si $a n'est pas définie ou si $a est null.