You are on page 1of 5

Dans cette nouvelle leçon, nous allons étudier en détail deux opérateurs de

comparaison qu’on a jusqu’à présent laissé volontairement de côté : l’opérateur


ternaire ? : et l’opérateur fusion null ??.
Ces deux opérateurs vont nous permettre d’écrire des conditions plus condensées et
donc d’alléger nos scripts et de gagner du temps en développement.

L’opérateur ternaire et les structures


conditionnelles ternaires
Les structures conditionnelles ternaires (souvent simplement abrégées “ternaires”)
correspondent à une autre façon d’écrire nos conditions en utilisant une syntaxe basée
sur l’opérateur ternaire ? : qui est un opérateur de comparaison.

Les ternaires vont utiliser une syntaxe très condensée et nous allons ainsi pouvoir écrire
toute une condition sur une ligne et accélérer la vitesse d’exécution de notre code.

Avant de vous montrer les écritures ternaires, je dois vous prévenir : beaucoup de
développeurs n’aiment pas les ternaires car elles ont la réputation d’être très peu
lisibles et très peu compréhensibles.

Ce reproche est à moitié justifié : d’un côté, on peut vite ne pas comprendre une
ternaire si on est un développeur moyen ou si le code qui nous est présenté n’est pas
ou mal commenté. De l’autre côté, si vous indentez et commentez bien votre code,
vous ne devriez pas avoir de problème à comprendre une structure ternaire.

Il reste cependant fortement recommandé de ne pas imbriquer les structures ternaires


les unes dans les autres tout simplement car votre code deviendrait vite illisible et car
le comportement de PHP lors de l’utilisation de plus d’un opérateur ternaire dans une
seule instruction n’est pas évident.

Les structures ternaires vont se présenter sous la forme suivante : test ? code à exécuter si
true : code à exécuter si false.

Illustrons immédiatement cela avec un exemple :

<!DOCTYPE html>
<html>
<head>
<title>Cours PHP & MySQL</title>
<meta charset="utf-8">
<link rel="stylesheet" href="cours.css">
</head>
<body>
<h1>Titre principal</h1>
<?php
$x = 4; //On affecte la valeur 4 à $x
//Ecrire ceci :
if($x >= 0){
echo '$x stocke un nombre positif<br>';
}else{
echo '$x stocke un nombre négatif<br>';
}
//Est equivalent à cela :
echo $x >= 0 ? '$x stocke un nb positif' : '$x stocke un nb négatif';
?>
<p>Un paragraphe</p>
</body>
</html>

Notez également qu’on va pouvoir abréger encore plus nos ternaires en omettant la
partie centrale de l’opérateur ternaire, c’est-à-dire le code entre le point d’interrogation
et les deux points.

En utilisant cette écriture, c’est la partie située avant l’opérateur qui sera renvoyée si le
test est évalué à true et la partie après l’opérateur sinon.
<!DOCTYPE html>
<html>
<head>
<title>Cours PHP & MySQL</title>
<meta charset="utf-8">
<link rel="stylesheet" href="cours.css">
</head>
<body>
<h1>Titre principal</h1>
<?php
$x = 4; //On affecte la valeur 4 à $x
//Ecrire ceci :
if($x >= 0){
echo ($x >= 0).'<br>';
}else{
echo '$x stocke un nombre négatif<br>';
}
//Est equivalent à cela :
echo $x >= 0 ?: '$x stocke un nb négatif';
?>
<p>Un paragraphe</p>
</body>
</html>

Ici, il faut bien comprendre que PHP ne va pas renvoyer le contenu de $x mais le
résultat de la comparaison $x >= 0, c’est-à-dire true, convertie sous forme d’entier (c’est-
à-dire 1).
On est ici obligés d’utiliser un couple de parenthèses dans notre instruction if pour que
le point soit bien considéré comme un opérateur de concaténation et pas comme
appartenant à 0.

L’opérateur fusion null


L’opérateur fusion null ?? ressemble dans sa syntaxe et dans son fonctionnement à
l’opérateur ternaire.

Cet opérateur utilise la syntaxe suivante : test ?? code à renvoyer si le résultat du test est
NULL.

Si l’expression à gauche de l’opérateur vaut NULL, alors l’expression à droite de


l’opérateur sera renvoyée. Dans tous les autres cas, c’est l’expression à gauche de
l’opérateur qui sera renvoyée.

On va généralement utiliser cet opérateur pour tester si une variable contient quelque
chose ou pas et, dans le cas où la variable est vide, lui faire stocker une valeur.

<!DOCTYPE html>
<html>
<head>
<title>Cours PHP & MySQL</title>
<meta charset="utf-8">
<link rel="stylesheet" href="cours.css">
</head>
<body>
<h1>Titre principal</h1>
<?php
$x = 4; //On affecte la valeur 4 à $x
$y = NULL;
$z;
$resultatx = $x ?? 'NULL';
$resultaty = $y ?? 'NULL';
$resultatz = $z ?? 'NULL';
echo '$x contient ' .$resultatx. '<br>
$y contient ' .$resultaty. '<br>
$z contient ' .$resultatz;
?>
<p>Un paragraphe</p>
</body>
</html>

Ici, on teste nos variables $x, $y et $z en utilisant l’opérateur fusion null. Si la variable
est vide ou contient NULL, la valeur NULL sera renvoyée et stockée
dans $resultatx, $resultaty ou $resultatz. Dans le cas contraire, c’est le contenu de la
variable qui sera stocké.

On affiche ensuite le contenu de nos variables stockant les résultats suite à l’utilisation
de l’opérateur fusion null en utilisant echo.

You might also like