2012-04-06 5 views
4

switch 문을 사용하는 더 좋은 방법을 연구하면서이 예제는 stackoverflow입니다. 나는 비슷한하고 싶어하지만, 트위스트와 함께 : 케이스 "는이"가을-통해 것입니다 통해 그것이 break를 돌 때까지 있기 때문에 계획대로폴드 스루 스위치 사용

switch($status) 
{ 
case "a": 
case "b": 
    echo "start execute code for case a and b"; 
case "a": 
    echo "continue to execute code for case a only"; 
case "b": 
    echo "continue to execute code for case b only"; 
case "a": 
case "b": 
    echo "complete code execution for case a and b"; 
break; 
case "c": 
    echo "execute code for case c"; 
break; 
case "d": 
    echo "execute code for case d"; 
break; 
case "e": 
    echo "execute code for case e"; 
break; 
case "f": 
    echo "execute code for case f"; 
break; 
default: 
    echo "execute code for default case"; 
} 

예, 위의 분명 작동하지 않습니다. 나는 너무 많은 코드를 반복하지 않고 우아하게 이것을 할 수있는 방법이 있는지 알고 싶다.

+0

보통 이것을 폴스 스루 (fall-through)라고합니다. 나는 지금까지 "캐스케이드"라고 불리는 것을 본 적이 없다고 생각합니다. – NullUserException

+2

중복 사례가있는 switch 문을 본 적이 없습니다. –

+0

여러 사례가 PHP afaik에서 잘 작동합니다. – powerbuoy

답변

5

case가 일치하면, PHP가 더 case 문을 무시하고, 스위치 중 하나가 (})를 폐쇄하거나 break가 발견 될 때까지 모든 코드를 실행한다. break도 스위치를 종료하므로 원하는 것은 불가능합니다.

+1

확실히 * 가능 *; OP는 if/elseif/else를 사용해야합니다. – NullUserException

+0

@ NullUserException : 더 쉽게 읽을 수 없게 만들었습니다. if/then/else로 시작할 수 있습니다. –

+1

그게 내 뜻이다 : if/elseif/then, switch 문을 사용하지 말라. – NullUserException

1

올바른 switch 문을 사용하지 않았습니다.

스위치를 일련의 if 문으로 대체해야합니다.

if($status == a || $status == b) { 
    echo "start execute code for case a and b"; 
    if(status == a) { 
     echo "continue to execute code for case a only"; 
    } 
    else { 
     echo "continue to execute code for case b only"; 
    } 
    echo "complete code execution for case a and b"; 
} 
else if ($status == c) { 
    echo "execute code for case c"; 
} 
... 
... 
else { 
    echo "execute code for default case"; 
} 
0

마크 B가 말한 것처럼 (최소한 스위치로는) 시도 할 수 없습니다. 다행스럽게도 중복 코드를 제거하는 좋은 방법은 메소드를 정의하는 것인데, 필요에 따라 a와 b에 공통된 코드를 호출 할 수 있습니다.

1

는 것 $status에는 방법이이 array 내가 당신이 원하는 것을 알것 경우를 제외하고 =ab 될 수있다이 내 개념

function runSwitch($status) { 

    if (in_array ("a", $status) && in_array ("b", $status)) { 
     echo "start execute code for case a and b" . PHP_EOL; 
    } 

    if (in_array ("a", $status)) { 
     echo "continue to execute code for case a only" . PHP_EOL; 
    } 

    if (in_array ("b", $status)) { 
     echo "continue to execute code for case b only" . PHP_EOL; 
    } 

    if (in_array ("c", $status)) { 
     echo "execute code for case c" . PHP_EOL; 
    } 

    if (in_array ("d", $status)) { 
     echo "execute code for case d" . PHP_EOL; 
    } 

    if (in_array ("e", $status)) { 
     echo "execute code for case e" . PHP_EOL; 
    } 

    if (in_array ("f", $status)) { 
     echo "execute code for case f" . PHP_EOL; 
    } 

    if (in_array ("c", $status) && in_array ("f", $status)) { 
     echo "continue to execute code for case c AND f only" . PHP_EOL; 
    } 

} 

예 1

의 증명이다
$status = array (
     "a" 
); 

runSwitch($status); 

출력

continue to execute code for case a only 

예 2

$status = array (
     "a" , "b" 
); 


runSwitch($status); 

출력

start execute code for case a and b 
continue to execute code for case a only 
continue to execute code for case b only 

나는이

여기
+0

도움 주셔서 감사합니다.하지만 $ status는 배열이 아닌 하나의 문자열입니다. 나는 그것을 어떻게하는지 안다. 나는 다른 사람들이 얻는 반응에 단지 즐겁다. –

6

내가 우아한 해결책이 될 것이라고 생각이다

감사합니다 도움이되기를 바랍니다 :

switch($status) 
{ 
case "a": 
case "b": 
    echo "start execute code for case a and b"; 
    if($status == "a") echo "continue to execute code for case a only"; 
    if($status == "b") echo "continue to execute code for case b only"; 
    echo "complete code execution for case a and b"; 
break; 
case "c": 
    echo "execute code for case c"; 
break; 
case "d": 
    echo "execute code for case d"; 
break; 
case "e": 
    echo "execute code for case e"; 
break; 
case "f": 
    echo "execute code for case f"; 
break; 
default: 
    echo "execute code for default case"; 
} 

여기서는 새로운 것을 발명하려고하지 않습니다. 여기있는 모든 사람들의 경험을 통해 배우려고 노력합니다. 대답을 해주신 모든 분들께 감사드립니다.

+0

이것이 왜 순위가 높은지 모릅니다. 이것은 가장 간단한 솔루션이며 향후 코드를 유지 보수하는 데 가장 유용합니다. – Jazz

+0

니스 ... 잘 했어. – Baba