L’opérateur ternaire en PHP
Accueil Tags Recherche18 Juillet 2013
L’opérateur ternaire en PHP
Connaissez-vous l'opérateur ternaire ?Un simple if
Prenons ce morceau de code en PHP, presque aussi simple qu’un Hello World :
if ($a) {
$b = $a;
} else {
$b = 1;
}
Si la variable $a est égale à true, on assigne sa valeur à $b. Le cas échéant, on assigne une valeur par défaut.
L’opérateur ternaire
Compressons un peu tout cela avec l’opérateur ternaire :
$b = $a ? $a : 1;
L’opérateur ternaire est un raccourci d’écriture pour le if. Il fonctionne de cette façon :
$var = [IF] ? [THEN] : [ELSE];
Encore plus court ?
Toujours plus loin, toujours plus fort, utilisons à présent le raccourci de l’opérateur ternaire ! (disponible avec PHP >= 5.3)
$b = $a ?: 1;
Ce raccourci permet d’omettre la partie centrale de l’opérateur ternaire. Il est toutefois à manier avec précaution car il utilise quelques subtilités du langage PHP.
Dans notre exemple, si la condition ($a) est égale à true, on assigne sa valeur à $b.
La subtilité ici, c’est que $a == true tant que sa valeur est différente de null, false, 0, ''…
On va donc assigner la valeur de $a à $b si et seulement si elle est différente de null, false, 0, ''…
Vous ne pouvez pas utiliser ce raccourci pour tout et n’importe quoi. Voici un exemple qui ne fonctionnerait pas :
$page = isset($_GET['p']) ?: 1;
Si $_GET['p'] est défini, la variable $page prendra systématiquement la valeur true (car isset($_GET['p']) === true).
Ce raccourci peut donc s’avérer utile, mais doit être utilisé avec précautions.
Un équivalent peut d’ailleurs être trouvé en C#, avec l’opérateur de fusion null ?? (en lien ci-dessous un article à ce propos)
Liens
Documentation PHP : les opérateurs de comparaison CodePoney : l’opérateur de fusion null (??) en C#