web-dev-qa-db-ja.com

Switch vsifステートメント

私はジレンマに陥っています。どちらを使用するのが最適で、なぜ..切り替えるかどうか。

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
}  
19
CyberJunkie

それらは異なる意味を持っています。

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

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

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

しかし、どちらが最速か疑問に思っている場合は、代わりに私がやりたいことを最も効果的に伝えるのはどれかと考える必要があります。これらは両方とも、ターゲットアーキテクチャで条件付きジャンプとして終了する可能性があります。

時期尚早の最適化...(あなたは残りを知っています:P)

30
alex

選択肢が3つ以上ある場合は、切り替えの方が適しています。これは主に、パフォーマンスではなく、コードの可読性と保守性を目的としています。

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

7
ddrace

Switchステートメントは、値を1回だけチェックするため、より高速になります。

6
iphonemaniac

まず、あなたが持っているものは同じではありません

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

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

これらは同義です

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

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

2つ目は、2つが同義語である私の2番目の例について話している場合です。次に、switchステートメントを使用すると、多くのif ..else ifステートメントをコーディングする際の苦痛を軽減できます。

私の見解では、スイッチはもう少し読みやすくすることもできます。ただし、それでも、特に複雑なロジックでは、if...elseを使用した方が簡単な場合があります。

5
John Hartsock

どちらのステートメントも、ある種のパラメーターを比較して結果を表示することによる意思決定ステートメントです。 switchステートメントはifステートメントよりも間違いなく高速ですが、ifステートメントは(<、>、<=、> =、!=、==)のような論理演算を使用する必要がある場合のswitchステートメントよりも大きな利点があります。 。論理演算に出くわしたときはいつでも、switchステートメントを使用することで打ちのめされますが、ifステートメントまたはif-elseまたはif-else-ifという目標に到達するために使用できる別の方法があることを心配しないでください。ステートメント。ほとんどの場合、スイッチではなくif-elseを使用することをお勧めします。

1
AliMohsin

単一の変数と可能な値のセットがあり、値ごとに異なるアクションを実行する場合は、それがswitch-caseの目的です。

Switchステートメントは、変数が許可された値のどれを持っているかを単に決定していることをより明確にします。

より複雑な条件、または考慮すべき複数の変数がある場合は、ifステートメントを使用してください。

1
jtdubs