L'opérateur ternaire et l'opérateur de fusion null en PHP
#1 Préambule
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'
.
- Si l'information est dans l'Url, alors tout va bien. L'
echo
affiche toto. - 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.
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 ?:
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)
, alorsisset($_GET['ident'])
retournetrue
et le ternaire retourne la valeur qu'il y a dans$_GET['ident']
soittoto
. - Si l'information n'est pas présente
(* http://localhost:3000)
, alorsisset($_GET['ident'])
retournefalse
et le ternaire retourne la valeur'Aucun'
.
#3
Opérateur de fusion null ??
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
.