2010-11-22 17 views
19

私はジレンマに陥っています。どのスイッチを使用するのがベストですか?スイッチとifステートメント

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

[else if]は "switch()case"より高速ですか?](http://stackoverflow.com/questions/767821/is-else-if-faster-than-switch-case)(その質問の言語はC#ですが、switch/caseとif文はPHPで同じように動作します) – BoltClock

答えて

30

最初の例は、条件が満たされると停止します。

目は二回$xをテストします。

あなたはifelse if 2番目にしたいことがあります。これは、1つの条件がと評価されるとすぐにブロックがスキップされることを意味します。

しかし、どちらが最速であるか不思議であれば、と最も効果的に通信するのはと考えるべきです。それらはおそらく両方とも、ターゲットアーキテクチャにおける条件付きジャンプとして終わるでしょう。

早期の最適化...(あなたは残りの部分を知っている:Pを)

+0

もちろん、2番目のif文がelse ifでない限り、もちろんです。 – BoltClock

+0

あなたは私の広い例で特に良い点を作っています!このため私はあなたの答えを正しい投票: – CyberJunkie

5

あなたが持っているものまずこれらは

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

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

同義である

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

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

同じではありません

2番目のeについて話している場合は2番目xampleは2つの同義語です。その後、switchステートメントを使用すると、if ..else ifステートメントのコーディングロットで多少の苦痛を和らげることができます。

私の視点のスイッチは、少し読みやすくすることもできます。しかし、その時でも、特に複雑なロジックの場合は、if...elseを使うほうがずっと良いです。

+1

良い比較!ありがとうございました! – CyberJunkie

+0

+1 * 'if ... else'を使うのは時間がかかります。* ...私はいつもより簡単なフローを提供するためにブール値のif文を使用しています。 –

7

2つ以上の選択肢がある場合は、スイッチが優れています。これは主に、コードの可読性とパフォーマンスよりも保守性のためです。

他の人が指摘しているように、あなたの例は同等ではありません。

1

あなたは、単一の変数、可能な値のセットを持って、そしてあなたが値ごとに異なるアクションを実行したい場合は、それがスイッチの場合は、何のためにあるのかです。

switch文を使用すると、変数に許可されている値がどれかを判断するだけで済むことが明らかになります。

複雑な条件や考慮する複数の変数がある場合は、if文を使用します。

5

switch文は値を一度しかチェックしないため、より高速になります。

1

両方のステートメントは、何らかのパラメータを比較して結果を示すことによって意思決定ステートメントです。switchステートメントは疑いなくifステートメントよりも高速ですが、ifステートメントはswitchステートメントよりも大きな利点があります。これは、(<、>、< =、> =、!=、==などのような論理演算を使用する必要がある場合です) 。あなたが論理的な操作で遭遇するたびに、あなたはswitch文を使って打ちのめされますが、if-statementまたはif-elseまたはif-else-ifであるあなたの目標に達するのに使うことができる別の方法があることを心配しないでくださいステートメント。私はスイッチの代わりにif-elseを使用することをお勧めします。