2010-11-22 9 views
19

Je suis dans un dilemme. Quel est le meilleur à utiliser et pourquoi .. basculer ou si?Passer vs si les déclarations

switch ($x) 
{ 
case 1: 
    //mysql query 
    //echo something 
    break; 
case 2: 
    //mysql query 
    //echo something 
    break; 
} 

...

if ($x == 1) { 
    //mysql query 
    //echo something  
} 

if ($x == 2) { 
    //mysql query 
    //echo something 
} 
+6

duplication possible de [est "else if" plus rapide que "switch() case"?] (Http://stackoverflow.com/questions/767821/is-else-if-faster-than-switch-case) (la langue dans cette question est C# mais switch/case et si les instructions se comportent généralement de la même manière en PHP) – BoltClock

Répondre

30

Ils ont des significations différentes.

Le premier exemple s'arrêtera lorsque la condition est remplie. La seconde testera deux fois $x.

Vous pouvez faire votre deuxième if un else if. Cela signifie que le bloc sera ignoré dès qu'une condition est évaluée à true.

Mais si vous vous demandez lequel est le plus rapide, vous devriez plutôt penser lequel communique le plus efficacement ce que je veux faire. Ils finiront très probablement par des sauts conditionnels dans l'architecture cible.

optimisation prématurée ... (vous savez le reste: P)

+0

Bien sûr, à moins que la seconde if soit une autre if. – BoltClock

+0

Vous faites un bon point surtout avec mon large exemple! Pour cela, je vote votre réponse correcte :) – CyberJunkie

5

d'abord ce que vous avez est pas le même

switch(value) 
    case condition1: 
    break; 
    case condition2: 
    break 

if (condition1) { 
} 
if (condition2) { 
} 

Ce sont synonymes

switch(value) 
    case condition1: 
    break; 
    case condition2: 
    break 

if (condition1) { 
} 
else if (condition2) { 
} 

Deuxièmement si vous parlez de mon deuxième e xample où les deux sont synonymes. Ensuite, en utilisant les instructions switch peut soulager la douleur dans le codage de beaucoup de if ..else if déclarations ....

Les commutateurs dans mon point de vue peuvent également fournir un peu plus de lisibilité. Mais même alors, il est parfois préférable d'utiliser if...else, surtout avec une logique complexe.

+1

Bonne comparaison! Je vous remercie! – CyberJunkie

+0

+1 pour * il y a du temps quand utiliser 'if ... else' est simplement mieux * ... Je me trouve toujours en utilisant if les instructions avec des booléens car cela facilite le flux. –

7

Le commutateur est meilleur lorsqu'il y a plus de deux choix. C'est surtout pour la lisibilité du code et la maintenabilité plutôt que la performance.

Comme d'autres l'ont souligné, vos exemples ne sont cependant pas équivalents.

1

Si vous disposez d'une seule variable, d'un ensemble de valeurs possibles et que vous souhaitez effectuer différentes actions pour chaque valeur, c'est la raison d'être de la casse.

Les instructions de commutation rendent plus évident que vous déterminez uniquement les valeurs autorisées d'une variable.

Si vous avez des conditions plus complexes ou plusieurs variables à prendre en compte, utilisez les instructions if.

5

L'instruction switch sera plus rapide car elle ne vérifie qu'une seule fois la valeur.

1

les deux instructions sont des instructions de prise de décision en comparant une sorte de paramètres et ensuite montrer les résultats.l'instruction switch est sans doute plus rapide que l'instruction if mais l'instruction if a un plus grand avantage sur l'instruction switch que lorsque vous devez utiliser des opérations logiques comme (<,>, < =,> =,! =, ==) . chaque fois que vous rencontrez les opérations logiques, vous serez éliminé en utilisant l'instruction switch, mais ne vous inquiétez pas, il existe un autre moyen d'atteindre votre objectif: if-statement ou if-else ou if-else-if déclaration. Je vous suggère d'utiliser if-else la plupart du temps plutôt que le commutateur un.

Questions connexes