If - elseif - else avec l'opérateur ternaire

Soyez le premier à donner votre avis sur cette source.

Snippet vu 40 495 fois - Téléchargée 28 fois


Contenu du snippet

Alors voila, moi qui aime bien l'opérateur ternaire pour sa simplicité, je me suis demandé comment on pouvait utiliser cet opérateur avec l'option elseif. Et bien voila :

Source / Exemple :


<?php
// Imaginons que votre code est de ce type :
$var = 1;
$var2 = 0;
if ( $var === 0 ) {
     $truc = true;
} elseif ( $var2 === 0 ) {
     $truc = true;
} else {
     $truc = false;
}
// 6 lignes à écrire pour si peu ? Voici la version compactée :

$var = 1;
$var2 = 0;
$truc = ( $var === 0 ) ? true : ( $var2 === 0 ) ? true : false;

// Et oui, en une ligne, j'utilise 2 fois l'opérateur ternaire pour faire comme un if-elseif-else.
?>
<?php 
// ***************** Nouvel exemple un peu plus concret ! *******************
// Imaginons que vous souhaitez utiliser votre propre mode de session.
// Pour rappel, l'utilisation d'une session oblige à avoir un id de session pour pouvoir s'y retrouver.
// Cet id, soit on le fait passer par un cookie, soit par l'URL (jusqu'ici, rien de très compliqué )
// Ici, l'id sera stocké soit stocké dans un cookie ( $_COOKIE['session_id'] ), ou par passage dans l'url :
// xxx.php?sid=xopiasj53sdf2483sd453s5

 $sid = ( isset($_COOKIE['session_id']) ) ? $_COOKIE['session_id'] : ( isset($_GET['sid']) ) ? $_GET['sid'] : NULL;

?>
Après, il faut faire d'autres test pour valider l'id de session, mais ca je m'en fou, ce que je veux présenter, c'est l'emploi du double opérateur ternaire à la place d'un if/elseif/else.
Voila, l'exemple est un peu plus présentable je trouve.
Je redonne quand même le même exemple du dessus avec le vieux if/elseif/else :
<?php
 if ( isset($_COOKIE['session_id']) ) {
      $sid = $_COOKIE['session_id'];
 } elseid ( isset($_GET['sid'] ) {
      $sid = $_COOKIE['session_id'];
 } else {
      $sid = NULL;
 }
?>
Enfin, moi perso, je trouve rebarbatif d'utiliser if/elseif/else pour changer qu'une seule variable. Je trouve l'opérateur ternaire beaucoup plus efficace pour ca. 
Si par contre, il y a d'autres chose à exécuter, l'opérateur ternaire n'est plus à utiliser !
Il faut savoir l'utiliser au moment opportun !

<?php
// Dernier exemple :
   if( isset($_SERVER['HTTP_X_FORWARDED_FOR']) ) {
      $ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
   } elseif ( isset($_SERVER['HTTP_CLIENT_IP']) ) {
      $ip  = $_SERVER['HTTP_CLIENT_IP'];
   } else {
      $ip = $_SERVER['REMOTE_ADDR'];
   }

// Ou alors :
 $ip = ( isset($_SERVER['HTTP_X_FORWARDED_FOR']) ) ? $_SERVER['HTTP_X_FORWARDED_FOR'] : ( isset($_SERVER['HTTP_CLIENT_IP']) ) ? $_SERVER['HTTP_CLIENT_IP'] : $_SERVER['REMOTE_ADDR'];
?>

Conclusion :


Cependant, niveau temps d'exécution, je sais que ca risque d'alourdir un peu la charge. De combien, je n'en sais rien.

Vous pouvez rajouter autant d'opérateur ternaire que de elseif à rajouter si jamais y'en a plus d'un !

Voila :)
Ps: je met ca en tant que Débutant, car c'est plus de la logique qu'autre chose. Même si l'opérateur ternaire est très rebutant au début (connaissance de cause :))

A voir également

Ajouter un commentaire Commentaires
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 43
1 juin 2006 à 20:34
des remerciements, c'est pas du tout du flood...
coockiesch Messages postés 2268 Date d'inscription mercredi 27 novembre 2002 Statut Membre Dernière intervention 13 septembre 2013 3
1 juin 2006 à 20:28
"Merci pour la citation de mon article ^^

beau déterrage au passage :)"
Si c'est pas du flood, ca...

@++

R@f
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 9
31 mai 2006 à 19:33
Merci pour la citation de mon article ^^

beau déterrage au passage :)
Andrei2006 Messages postés 7 Date d'inscription jeudi 13 avril 2006 Statut Membre Dernière intervention 22 septembre 2006
31 mai 2006 à 03:49
Mouais... perso je suis contre les ternaires :

1) Ton code deviens ilisible. Franchement des ? puis des : c'est pas très rassurant :)

2) (et c'est prouvé :) Les blocs conditionels "classiques" et les switch-case sont plus rapides que les ternaires :D
http://www.vulgarisation-informatique.com/optimiser-php.php
FhX Messages postés 2350 Date d'inscription mercredi 13 octobre 2004 Statut Membre Dernière intervention 18 avril 2015 3
2 nov. 2005 à 11:16
J'aurais du être plus précis :

L'opérateur ternaire fonctionne comme ca :

$var = ( condition ) ? condition-vrai : condition-fausse;

Un peu comme un if/else
if ( condition ) {
condition-vrai;
} else {
condition-fausse;
}

Et bien maintenant, j'utilise l'opérateur ternaire pour faire un if/elseif/else :

$var = ( condition ) ? condition-vrai : ( condition2 ) ? condition-2 vrai : condition-2 fausse;

Ce qui revient à :
if ( condition ) {
condition-vrai;
}elseif ( condition2 ) {
condition2-vrai
}else {
condition2-fausse;
}

Voila !
Afficher les 25 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.