IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

elseif else if


Sujet :

Langage PHP

  1. #1
    Membre averti Avatar de Linio
    Inscrit en
    Octobre 2005
    Messages
    431
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 431
    Points : 332
    Points
    332
    Par défaut elseif else if
    Y'a t'il une différence entre : else if et elseif ?

    J'utilisais toujours elseif dans mes programmes et en parcourant mon projet je vois qu'il y a des else if qui se baladent dans le code.

    De même je vois pas mal de programmeur mettre à la fin de leur blocs entre accolades des ; . Y'a t'il un intérêt à celà?

    Voilà deux questions stupides mais dont je n'ai pas trouvé la réponse et qui m'intriguent.
    Linio

  2. #2
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 777
    Points
    17 777
    Par défaut
    Citation Envoyé par Linio
    Y'a t'il une différence entre : else if et elseif ?
    Bien sûr que non :
    Citation Envoyé par http://fr.php.net/manual/fr/control-structures.elseif.php
    En PHP, vous pouvez aussi écrire "else if" en deux mots et son comportement sera identique à la version en un seul mot. La sémantique des deux expressions est légèrement différente, mais au bout du compte, le résultat sera exactement le même.
    Citation Envoyé par Linio
    De même je vois pas mal de programmeur mettre à la fin de leur blocs entre accolades des ; . Y'a t'il un intérêt à celà?
    Oui, induire des erreurs S'il n'y a pas de blocs liés qui succèdent celui-ci (else ou elseif par exemple) ce n'est pas gênant sinon ça l'est ou le sera.

  3. #3
    Membre averti Avatar de Linio
    Inscrit en
    Octobre 2005
    Messages
    431
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 431
    Points : 332
    Points
    332
    Par défaut
    C'est bien ce que je pensais pour le ;

    Pour le elseif je ne comprends pas bien l'intérêt de laisser les deux choix.

    Merci pour cette réponse claire en tout cas.
    Linio

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 2
    Points : 2
    Points
    2
    Par défaut Else If et ElseIf
    Evidement, ce n'est PAS la même chose.
    Elseif est plus rapide qu'un else if puisqu'il s'agit d'une seule fonction, ce qui n'est pas le cas du else if.
    En effet, si tu as :
    if (condition) {traitement}
    else {
    if (condition) {traitment}
    }
    c'est forcément plus long, puisqu'il faut d'abord rentrer dans le "else", puis exécuter la fonction if()
    Grâce au elseif (condition), tu fais du deux en un, et tu économises le temps de passage entre le else et le if. Le fait de nommer ton opération elseif évite au précompilateur de traduire le "else if" en "elseif".
    J'espère avoir été assez clair ;-)
    De toute façon, il te suffit de faire un benchmark sur 10 000 d'exécutions de ces deux instructions et tu verras par toi même que le "if elseif" et plus rapide que le "if else if", et même que le switch d'ailleurs.
    ++

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 2
    Points : 2
    Points
    2
    Par défaut Benchmark ElseIf, Else If, et Switch
    Pour ceux que ça intéresse, vous pouvez tester ce benchmark et voir le résultat. C'est flagrant, et très logique aussi...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    <html><head></head>
    <body>
    <?php
     
    $t1 = microtime(true);
    for ($i=0; $i<10000; ++$i)
    {
    	for($tes=1; $tes<32; ++$tes)
    	{
    		if ($tes == 1) $val=0;
    		elseif ($tes == 2) $val=0;
    		elseif ($tes == 3) $val=0;
    		elseif ($tes == 4) $val=0;
    		elseif ($tes == 5) $val=0;
    		elseif ($tes == 6) $val=0;
    		elseif ($tes == 7) $val=0;
    		elseif ($tes == 8) $val=0;
    		elseif ($tes == 9) $val=0;
    		elseif ($tes == 10) $val=0;
    		elseif ($tes == 11) $val=0;
    		elseif ($tes == 12) $val=0;
    		elseif ($tes == 13) $val=0;
    		elseif ($tes == 14) $val=0;
    		elseif ($tes == 15) $val=0;
    		elseif ($tes == 16) $val=0;
    		elseif ($tes == 17) $val=0;
    		elseif ($tes == 18) $val=0;
    		elseif ($tes == 19) $val=0;
    		elseif ($tes == 20) $val=0;
    		elseif ($tes == 21) $val=0;
    		elseif ($tes == 22) $val=0;
    		elseif ($tes == 23) $val=0;
    		elseif ($tes == 24) $val=0;
    		elseif ($tes == 25) $val=0;
    		elseif ($tes == 26) $val=0;
    		elseif ($tes == 27) $val=0;
    		elseif ($tes == 28) $val=0;
    		elseif ($tes == 29) $val=0;
    		elseif ($tes == 30) $val=0;
    		else $val=0;
    	}
    }
    $t2 = microtime(true);
     
    $t =  $t2-$t1;
    echo 'temps ElseIf (val = ' . $tes . '/30) : ' . $t . '<br />';
     
     
    $t1 = microtime(true);
    for ($i=0; $i<10000; ++$i)
    {
    	for($tes=1; $tes<32; ++$tes)
    	{
    		if ($tes == 1) $val=0;
    		else if ($tes == 2) $val=0;
    		else if ($tes == 3) $val=0;
    		else if ($tes == 4) $val=0;
    		else if ($tes == 5) $val=0;
    		else if ($tes == 6) $val=0;
    		else if ($tes == 7) $val=0;
    		else if ($tes == 8) $val=0;
    		else if ($tes == 9) $val=0;
    		else if ($tes == 10) $val=0;
    		else if ($tes == 11) $val=0;
    		else if ($tes == 12) $val=0;
    		else if ($tes == 13) $val=0;
    		else if ($tes == 14) $val=0;
    		else if ($tes == 15) $val=0;
    		else if ($tes == 16) $val=0;
    		else if ($tes == 17) $val=0;
    		else if ($tes == 18) $val=0;
    		else if ($tes == 19) $val=0;
    		else if ($tes == 20) $val=0;
    		else if ($tes == 21) $val=0;
    		else if ($tes == 22) $val=0;
    		else if ($tes == 23) $val=0;
    		else if ($tes == 24) $val=0;
    		else if ($tes == 25) $val=0;
    		else if ($tes == 26) $val=0;
    		else if ($tes == 27) $val=0;
    		else if ($tes == 28) $val=0;
    		else if ($tes == 29) $val=0;
    		else if ($tes == 30) $val=0;
    		else $val=0;
    	}
    }
    $t2 = microtime(true);
     
    $t =  $t2-$t1;
    echo 'temps Else If (val = ' . $tes . '/30) : ' . $t . '<br />';
     
     
    $t1 = microtime(true);
    for ($i=0; $i<10000; ++$i)
    {
    	for($tes=1; $tes<32; ++$tes)
    	{
    		switch($tes)
    		{
    			case 1 : $val=0; break;
    			case 2 : $val=0; break;
    			case 3 : $val=0; break;
    			case 4 : $val=0; break;
    			case 5 : $val=0; break;
    			case 6 : $val=0; break;
    			case 7 : $val=0; break;
    			case 8 : $val=0; break;
    			case 9 : $val=0; break;
    			case 10 : $val=0; break;
    			case 11 : $val=0; break;
    			case 12 : $val=0; break;
    			case 13 : $val=0; break;
    			case 14 : $val=0; break;
    			case 15 : $val=0; break;
    			case 16 : $val=0; break;
    			case 17 : $val=0; break;
    			case 18 : $val=0; break;
    			case 19 : $val=0; break;
    			case 20 : $val=0; break;
    			case 21 : $val=0; break;
    			case 22 : $val=0; break;
    			case 23 : $val=0; break;
    			case 24 : $val=0; break;
    			case 25 : $val=0; break;
    			case 26 : $val=0; break;
    			case 27 : $val=0; break;
    			case 28 : $val=0; break;
    			case 29 : $val=0; break;
    			case 30 : $val=0; break;
    		}
    	}
    }
    $t2 = microtime(true);
    $t =  $t2-$t1;
    echo 'temps Switch (val = ' . $tes . '/30) : ' . $t . '<br />';
     
    ?>
    </body>
    </html>

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    32
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2004
    Messages : 32
    Points : 48
    Points
    48
    Par défaut
    résultat du petit test de code ci-dessus, chez moi ce n'est pas du tout parlant !


    refresh 1 :
    temps ElseIf (val = 32/30) : 0.337461948395
    temps Else If (val = 32/30) : 0.336936950684
    temps Switch (val = 32/30) : 0.334349155426

    refresh 2 :
    temps ElseIf (val = 32/30) : 0.338791131973
    temps Else If (val = 32/30) : 0.332474946976
    temps Switch (val = 32/30) : 0.33616900444

    refresh 3 :
    temps ElseIf (val = 32/30) : 0.333489894867
    temps Else If (val = 32/30) : 0.332661867142
    temps Switch (val = 32/30) : 0.334265947342

    Refresh 4 (j'ai bougé le code, le bloc du elseif est à la fin maintenant) :
    temps Else If (val = 32/30) : 0.348764896393
    temps Switch (val = 32/30) : 0.335680961609
    temps ElseIf (val = 32/30) : 0.332627773285

    temps Else If (val = 32/30) : 0.353483915329
    temps Switch (val = 32/30) : 0.33607506752
    temps ElseIf (val = 32/30) : 0.335407018661

    Et voila ca n'est plus pareil ^^
    Du coup je ne sais toujours pas lequel utiliser

    Habituellement je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    if ($budget == 0)
    {
    } else {
       if ($budget == -1)
       {
       } else {
       }
    }
    mais je n'ai jamais cerné le elseif, donc apparement le code suivant fait la même chose et je le trouve plus "jolie" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    if ($budget == 0)
    {
    } elseif ($budget == -1)
    {
    } else {
    }
    Allez, en avant pour le elseif du coup

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [CR XI] Problème de syntaxe IF-ELSE || IF-ELSEIF-ELSE
    Par ygyongy dans le forum Formules
    Réponses: 3
    Dernier message: 23/07/2013, 17h30
  2. Syntax error : if, elseif, else
    Par Invité dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 10/01/2013, 09h39
  3. if elseif else ?
    Par caroen dans le forum Langage
    Réponses: 2
    Dernier message: 19/11/2008, 10h29
  4. Synthétiser un groupe de if, elseif, else
    Par seb1395 dans le forum Langage
    Réponses: 5
    Dernier message: 24/12/2007, 14h37
  5. [Système] probleme dans la structure if/elseif/else
    Par samsso2005 dans le forum Langage
    Réponses: 9
    Dernier message: 14/03/2006, 17h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo