Professional Documents
Culture Documents
12.structure Ternaires
12.structure Ternaires
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.
Les structures ternaires vont se présenter sous la forme suivante : test ? code à exécuter si
true : code à exécuter si false.
<!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.
Cet opérateur utilise la syntaxe suivante : test ?? code à renvoyer si le résultat du test est
NULL.
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.