2010-11-22 5 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으로 만들 수 있습니다. 이는 하나의 조건이 으로 평가되는 즉시 블록이 건너 뛸 것임을 의미합니다.

가장 빠르지 만 궁금하신 점이 있으시면을 가장 효과적으로 전달하는 을 생각해보십시오. 둘 다 타겟 아키텍처에서 조건부 점프로 끝날 것입니다.

조기 최적화 (당신은 나머지 알고 : P)

+0

물론 두 번째 if 문이 else if가 아닌 한 물론입니다. – BoltClock

+0

넓은 예를 들자면 특히 좋은 점이 있습니다! 이를 위해 나는 당신의 답을 옳게 평가합니다 :) – CyberJunkie

5

먼저 당신이해야하는 것은 이러한 동의어 같은

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) { 
} 

둘째로 내 두 번째 전자에 대해 이야기하는 경우 두 가지가 동의어 인 예. 그렇다면 switch 문장을 사용하면 if ..else if 문장을 많이 코딩 할 때의 고통을 덜어 줄 수 있습니다 ....

내 관점의 스위치는 약간의 가독성을 제공 할 수도 있습니다. 그러나 그때조차도 if...else을 사용할 때 특히 복잡한 논리를 사용하는 것이 더 낫습니다.

+1

좋은 비교! 고맙습니다! – CyberJunkie

+0

+1 *'if ... else'를 사용하는 것이 더 낫다는 시간이 있습니다 * ... 나는 더 쉬운 흐름을 제공하기 때문에 항상 boolean을 사용하는 if 문을 사용합니다. –

7

두 개 이상의 선택 사항이있을 때 스위치가 더 좋습니다. 주로 코드 가독성과 성능보다는 유지 보수성을위한 것입니다.

다른 사람들이 지적했듯이 예제는 동일하지 않습니다.

1

하나의 변수와 가능한 값 집합이 있고 각 값에 대해 다른 동작을 수행하려는 경우, 그 것이 스위치 케이스입니다.

switch 문을 사용하면 변수에 허용 된 값 중 어느 것이 있는지 쉽게 판별 할 수 있습니다.

복잡한 조건이나 고려해야 할 변수가 여러 개인 경우 if 문을 사용하십시오.

5

switch 문은 값을 한 번만 확인하기 때문에 빠릅니다.

1

두 진술은 매개 변수의 일종을 비교하여 의사 결정 진술이며 결과를 보여줍니다.switch 문은 의심 할 여지없이 if 문보다 빠르지 만 if 문은 switch 문보다 큰 이점을 가지고 있습니다 (<,>, < =,> =,! =, == 등의 논리 연산을 사용해야하는 경우) . 논리적 연산을 접하게 될 때마다 switch 문을 사용하여 피해를 입 겠지만 if 문 또는 if-else 또는 if-else-if 인 목표에 도달하는 데 사용할 수있는 또 다른 방법이 있다고 걱정하지 마십시오. 성명서. 스위치 하나가 아닌 대부분의 시간에 if-else를 사용하도록 제안 할 것입니다.