begin process at 2010 03 22 02:55:17
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Tutoriaux

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

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


 Information sur la source

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

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
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 :21 268

Auteur : FhX

Ecrire un message privé
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 !

 Sources du même auteur

PHP5 - UTILISATION DES ITÉRATEURS ET DE LA RÉFLECTION.
PHP 5 - CLASSE MYSQL (STYLE MYSQLI)
[PHP5] CLASSE DATE/HEURE
PHP5 - GESTION DE MODULES EN OBJET
PHP5 - CLASSE DE NEWS ET DE COMMENTAIRES

 Sources de la même categorie

Source avec Zip EXEMPLE DE CRÉATION D'UN SCRIPT D'AUTHENTIFICATION par phpAnonyme
Source avec Zip Source avec une capture N/X API: GOOGLE MAPS DEPUIS PHP VALID W3C par GillesWebmaster
PHP EXTRAIRE DES MAILS D'UN GROS FICHIER LOCAL OU DISTANT par cosmoswarezone1
FORMULAIRE PHP + VERIFICATION + ENVOI DU MAIL par cosmoswarezone1
Source avec Zip Source avec une capture CODE BARE!!! par toutoos

 Sources en rapport avec celle ci

IFSETOR POUR PHP5 par cedriclomb

Commentaires et avis

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...

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)

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... ;-)

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...

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 ;-)

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 :)

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.

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 :/

Commentaire de Anthomicro le 25/10/2005 12:18:36

un problème de cache surement ;-)

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

Commentaire de Anthomicro le 26/10/2005 22:57:44

en php il est derrière ;-)

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

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

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

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;

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 :)

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 ;-)

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 :)

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 ;-)

Commentaire de FhX le 31/10/2005 10:42:55

La dessus on est d'accord :)

Commentaire de coolmanin25 le 01/11/2005 19:01:14

Je comprends pas grand chose lol

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 !

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

Commentaire de Anthomicro le 31/05/2006 19:33:37

Merci pour la citation de mon article ^^

beau déterrage au passage :)

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

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

instruction if..elseif...else [ par andlauer ] j'ai un problème avec l'instruction if..elseif...else. Il ne reconnait simplement pas le elseif. Par exemple, dans cette instruction : if ($act == 'T Tableau dans php [ par shadow578 ] Bonjour, Alors j'ai un petit script qui me permet de lister les fichiers présents dans le dossier, jusqu'à la tout va bien, mais j'aimerai les cla affichage de la mention [ par rudybiss ] Bonjour!Je développe une application sur la gestion des notes en php.Tout marche bien à l'exception de l'affichage de la mention.En fait,il n'arrive p arborescence tree php [ par lina22 ] bonjour, en faite lors de l'affichage de l'arborescence je vx pas afficher l'extension est ce que qlq un peut m'aider svp merci exp nom.php je veux af echiquier [ par jackinfor ] Bonjour,J'essaye pour le moment de faire un échiquier, mais comme je suis un débutant bah je bloque :)Voila mon code pour le momentMerci de m'aider&lt if_else [ par menyarito ] Bonjour, le bloc affiche uniquement le 1er résultat [u]'disponibles'[/u] quelque soit la condition true or false.j'ai beaucoup essayer avec mais... [ caratere indésirable qui s'ajoute automatiquement [ par Moritus ] bonjour, J'ai un problème que j'arrive pas à réglé. Voila quand j'affiche ma page, j'ai le caractere '1' qui apparait mais je n'arrive pas a voir de 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


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mars 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

 
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

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,608 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales