Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

IF - ELSEIF - ELSE AVEC L'OPÉRATEUR TERNAIRE


Information sur la source

Catégorie :Tutoriaux Classé sous : opérateur, ternaire, if, else, elseif Niveau : Débutant Date de création : 25/10/2005 Date de mise à jour : 25/10/2005 14:56:38 Vu : 18 021

Note :
5,5 / 10 - par 2 personnes
5,50 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (25)
Ajouter un commentaire et/ou une note

Description

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

  • <?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'];
  • ?>
<?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 :))
 

Historique

25 octobre 2005 01:02:42 :
J'ai oublié les balises php :p
25 octobre 2005 11:58:17 :
Correction et ajout d'un nouvel exemple un peu plus concret.
25 octobre 2005 14:56:39 :
Rajout d'un autre exemple basé sur l'adresse ip !

Commentaires et avis

signaler à un administrateur
Commentaire de sebmafate le 25/10/2005 06:12:34 administrateur CS

d'un autre coté, ton code peut aussi s'écrire comme ceci :
$truc = ( $var === 0 || $var2 === 0 );

et je trouve ca plus propre...

signaler à un administrateur
Commentaire de monoceros01 le 25/10/2005 06:56:44

Mouahahah!
Ouais utilises trois valeurs différentes pour $truc dans ton exemple sinon ça rime à rien :p

Sinon c'est bien joli (j'ai utilisé cette syntaxe pour des trucs court), mais ça devient vite illisible/indigeste :)

(Sinon ça aurait pas plutôt sa place dans "tuto" que dans "code" ce truc? :x)

signaler à un administrateur
Commentaire de malalam le 25/10/2005 08:54:52 administrateur CS

J'ai tâché de déplacer.

T'as vraiment du temps à perdre, n'empêche, FhX, pour trouver des trucs pareils... ;-)

signaler à un administrateur
Commentaire de coucou747 le 25/10/2005 10:16:27

ça s'utilises dans un projet, mais ça, ça ne fait rien... c'est pas vraiment une source, juste un bout de tuto... Mais dans ce cas, il manque les explications et les benchs...

signaler à un administrateur
Commentaire de Anthomicro le 25/10/2005 10:31:32

Niveau benchs l'opérateur ternaire est légèrement derrière le if,elseif,else

Sinon bah j'aurais mis ça dans les tutos aussi ;-)

signaler à un administrateur
Commentaire de FhX le 25/10/2005 11:46:38

Ouais, mon exemple est vraiment mal pris, car j'utilise true/false comme élément de réponse à mon opérateur.
Mais jvais le refaire.
Par contre, je savais pas trop où le mettre... code ou tuto :/ Alors je laisse le choix à notre cher Admin de le mettre la où il le veut ;)

Et oui Malalam, j'ai du temps à perdre :) Enfin pas tout à fait, parce que j'utilise ce type d'opérateur pour ma propre gestion des sessions. Et l'opérateur ternaire n'a pas été crée que pour faire joli :)

signaler à un administrateur
Commentaire de sebmafate le 25/10/2005 11:50:39 administrateur CS

les admins ne peuvent pas modifier ce paramètre... C'est soit code, soit tuto.
nous ne pouvons modifier que le titre et la catégorie des sources (et tuto). Accessoirement le flag indiquant que la source est en .net, mais ce ne vous concerne pas.

signaler à un administrateur
Commentaire de FhX le 25/10/2005 12:16:31

Pourtant, ma source est bien passé du coté tuto...Du moins sur cette page, mais pas sur la page index :/

signaler à un administrateur
Commentaire de Anthomicro le 25/10/2005 12:18:36

un problème de cache surement ;-)

signaler à un administrateur
Commentaire de coockiesch le 26/10/2005 22:54:17

Salut!
Je trouve dommage d'avoir une source que pour ca... L'opérateur ternaire est assez simple et ton else if n'est qu'une imbrication. Et une fois qu'on a vu un exemple, on les a un peu tous vus...

J'aurais préféré si c'était avec d'autres "astuces", etc...

Anthomicro : "Niveau benchs l'opérateur ternaire est légèrement derrière le if,elseif,else"
T'es sur, il me semblait que c'était là son intérêt principal, d'être plus rapide (en tout cas dans d'autres languages de prog). Je me trompe?

@++

R@f

signaler à un administrateur
Commentaire de Anthomicro le 26/10/2005 22:57:44

en php il est derrière ;-)

www.vulgarisation-informatique.com/optimiser-php.php

signaler à un administrateur
Commentaire de coockiesch le 26/10/2005 23:21:19

Oh! Je m'y attendais pas! :)
Bon, alors je suppose que j'ai vu ca en C++.

Merci pour le lien! ( le $var1 = $var2 = $var3 = 1  m'a étonné aussi! )

@++

R@f

signaler à un administrateur
Commentaire de FhX le 30/10/2005 20:26:45

"L'opérateur ternaire est assez simple et ton else if n'est qu'une imbrication." Ah parce qu'un if/elseif/else peut faire autre chose qu'une imbrication ?
Par contre, je tiens à te rassurer tout de suite, bon nombre de personnes ne comprennent pas l'utilisation de l'opérateur ternaire.
En même temps, j'ai juste mis ca pour montrer que l'op ternaire peut faire autre chose qu'un if/else standard et qu'il peut aussi faire du if/elseif/elseif/else par exemple, ce dont bon nombre n'ont peut-être jamais pensé à faire quand il y a des conditions qui sont simples.

"( le $var1 = $var2 = $var3 = 1  m'a étonné aussi! )"
Non, pas pour moi. Etant donnée que PHP interprète au fur et à mesure :
-> Création de $var1.
-> Valeur de $var1 = $var2.
-> $var2 n'existe pas. Création de $var2.
-> Valeur de $var2 = $var3.
-> $var3 n'existe pas. Création de $var3.
-> Valeur de $var3 = 1.
-> Donc, $var2 = $var3 = 1.
-> $var1 = $var2 = 1.

Ce type d'écriture est d'autant plus long qu'il y a de variable en plus.
Bah voui, PHP ne lit pas à l'envers :D

signaler à un administrateur
Commentaire de Anthomicro le 30/10/2005 20:50:41

"Non, pas pour moi. Etant donnée que PHP interprète au fur et à mesure :"

justement, en toute logique

$var1=$var2=$var3=1; devrait être plus rapide que

$var1=1;
$var2=1;
$var3=1;

signaler à un administrateur
Commentaire de FhX le 30/10/2005 21:21:44

Non, bien au contraire !

Il est beaucoup plus facile de créer directement une variable par sa valeur plutot que de créer une variable qui aura pour valeur une autre variable qui elle-même aura pour valeur une autre variable etc...

C'est de l'interprétation à la volée, chose qui n'existe pas quand on compile.
Voila pourquoi assigner une valeur à une variable une par une est plus rapide que d'assigner la même valeur à un paquet de variables :)

Question de raisonnement :)

signaler à un administrateur
Commentaire de Anthomicro le 30/10/2005 21:26:27

"Question de raisonnement :)"

effectivement, pour moi quand je vois que $var=$var2=$var3=1 c'est plus rapide pour moi que de voir

$var=1;
$var2=1;
$var3=1;

etc... après c'est sûr que bon c'est comme pour le reste, certains sont rapides sur une méthode au contraire des autres et inversement qui préfèrent une autre méthode ;-)

signaler à un administrateur
Commentaire de FhX le 30/10/2005 22:32:36

Pour toi c'est plus rapide pour l'oeil :) Pas pour l'interpréteur qui doit se taper une ligne entière pour connaitre la valeur de $var1 par exemple :)

Pour nous, c'est très logique donc très rapide. Pour l'interpréteur non, car plus la ligne est grande, plus elle est plus longue à examiner.

C'est pareil pour l'opérateur ternaire. Il est plus lent car tout ce fait en une ligne (condition, résultat vrai, résultat faux), donc tout doit être pris en compte. Hors, un vieux if() ira plus vite car il ne prendra en compte que le bon résultat (qu'il soit vrai ou faux).

Voila pourquoi :)

signaler à un administrateur
Commentaire de Anthomicro le 30/10/2005 23:04:07

Ce que je veux dire par là c'est que l'interpréteur n'est pas forcément logique par rapport à l'humain ;-)

signaler à un administrateur
Commentaire de FhX le 31/10/2005 10:42:55

La dessus on est d'accord :)

signaler à un administrateur
Commentaire de coolmanin25 le 01/11/2005 19:01:14

Je comprends pas grand chose lol

signaler à un administrateur
Commentaire de FhX le 02/11/2005 11:16:00

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 !

signaler à un administrateur
Commentaire de Andrei2006 le 31/05/2006 03:49:54

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

signaler à un administrateur
Commentaire de Anthomicro le 31/05/2006 19:33:37

Merci pour la citation de mon article ^^

beau déterrage au passage :)

signaler à un administrateur
Commentaire de coockiesch le 01/06/2006 20:28:21

"Merci pour la citation de mon article ^^

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

@++

R@f

signaler à un administrateur
Commentaire de coucou747 le 01/06/2006 20:34:55

des remerciements, c'est pas du tout du flood...

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

Pb rajout saut de page [ par Falcon074 ] Bonjour, Je cherche un moyen de rajouter un saut de page à la fin de tous les 6 enr requete pour recherche multicritere [ par phpnuke ] if (empty($_POST['province'])){$AOP = "OR";}else{$AOP = "AND";}if (empty($_POST['categorie'])){$AOC = "OR";}else{$AOC = "AND";}if (empty($_POST['ville Affichage dans textarea [ par Falcon074 ] Bonjour, Je suis nouveau et j'ai besoin d'aide !!!  En effet j'aimerai à aprtir d'un formulaire (méthode POST) écrire mes données récupéré et mémorise Changement de valeur d'une variable avant un envoi de mail [ par chris tuckers ] Bien le bonjour amis CSistes !!Mon probleme d'aujourd'hui, j'ai décidé de le mettre dans la rubrique débutant car à mon avis, vous allez pouvoir le ré Problème avec les cases à cocher [ par SamiEniso ] j'ai fait un tableau avec des cases à cocher dans un formulaire. lorsque ce formulaire est envoyé à la page de traitement suivante, les cases non coch condition if et else [ par gigawatt ] BonjourQuelqu'un peut il apporter sa contribution à ma requête:En fait j'explique: certains clients de ma base foxpro ont plusieurs contrats de mainte selection option avec if et else et else if [ par gigawatt ] BonjourQuelqu'un peut il apporter sa contribution à ma requête:En fait j'explique: certains clients de ma base foxpro ont plusieurs contrats de mainte condition if et else [ par gigawatt ] Bonjour Je suis obligé de passer ce message en textbox Je n'arrive pas à utiliser les conditions if et else avec une option sélect J'explique j'ai qu transfert d'une image par formulaire vers une base de données [ par stageman ] Bonjour,je developpe la partie admin de mon site et j'ai réalisé un formulaire qui transfert les données rentrées dans celui-ci vers ma base de donnée Insertion dans base de données MYSQL IMPOSSIBLE! [ par MuS3 ] Bonjour,Je fais un projet pour mon bac et c'est un formulaire, je dispose de deux fichiers, un inscription.html et un inscription .php.Le problème est


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :

Comparez les prix Nouvelle version


HTC G1

Entre 449€ et 449€


Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,406 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.