switch

(PHP 4, PHP 5, PHP 7, PHP 8)

switch 문은 동일한 식에 대한 일련의 IF 문과 유사합니다. 많은 경우에 동일한 변수(또는 표현식)를 많은 다른 값과 비교하고 동일한 값에 따라 다른 코드를 실행할 수 있습니다. 이것이 바로 switch 문을 위한 것입니다.

참고: 일부 다른 언어와 달리 continue 문은 switch에 적용되며 break와 유사하게 작동합니다. 루프 내부에 스위치가 있고 외부 루프의 다음 반복을 계속하려면 continue 2를 사용하십시오.

참고: switch/case느슨한 비교를 수행합니다.

다음 두 예제는 동일한 것을 작성하는 두 가지 다른 방법입니다. 하나는 일련의 ifelseif 문을 사용하고 다른 하나는 switch 문을 사용합니다.

예제 #1 switch 구조

                  
<?php
if ($i == 0) {
    echo "i equals 0";
} elseif ($i == 1) {
    echo "i equals 1";
} elseif ($i == 2) {
    echo "i equals 2";
}

switch ($i) {
    case 0:
        echo "i equals 0";
        break;
    case 1:
        echo "i equals 1";
        break;
    case 2:
        echo "i equals 2";
        break;
}
?>
                  
                

예제 #2 switch 구조로 문자열 사용 가능

                  
<?php
switch ($i) {
    case "apple":
        echo "i is apple";
        break;
    case "bar":
        echo "i is bar";
        break;
    case "cake":
        echo "i is cake";
        break;
}
?>
                  
                

실수를 피하기 위해 switch 문이 어떻게 실행되는지 이해하는 것이 중요합니다. switch 문은 줄 단위로 실행합니다(실제로는 문 단위로). 처음에는 코드가 실행되지 않습니다. 표현식이 switch 표현식의 값과 일치하는 값으로 평가되는 case 문을 찾은 경우에만 PHP가 명령문을 실행하기 시작합니다. PHP는 switch 블록이 끝날 때까지 또는 break 문을 처음 볼 때까지 명령문을 계속 실행합니다. 케이스의 명령문 목록 끝에 break 명령문을 작성하지 않으면 PHP는 다음 케이스의 명령문을 계속 실행합니다. 예를 들어:

                  
<?php
switch ($i) {
    case 0:
        echo "i equals 0";
    case 1:
        echo "i equals 1";
    case 2:
        echo "i equals 2";
}
?>
                  
                

여기서 $i가 0이면 PHP는 모든 echo 문을 실행합니다! $i가 1이면 PHP는 마지막 두 echo 문을 실행합니다. $i가 2인 경우에만 예상 동작('2와 같음'이 표시됨)을 얻을 수 있습니다. 따라서 break 문을 잊지 않는 것이 중요합니다(특정 상황에서 의도적으로 제공하는 것을 피하고 싶을지라도). ).

switch 문에서 조건은 한 번만 평가되고 결과는 각 case 문과 비교됩니다. elseif 문에서 조건이 다시 평가됩니다. 귀하의 조건이 단순한 비교보다 더 복잡하거나 빡빡한 루프에 있는 경우 switch이 더 빠를 수 있습니다.

케이스에 대한 명령문 목록은 비어 있을 수도 있으며, 이는 단순히 다음 케이스에 대한 명령문 목록으로 제어를 전달합니다.

                  
<?php
switch ($i) {
    case 0:
    case 1:
    case 2:
        echo "i is less than 3 but not negative";
        break;
    case 3:
        echo "i is 3";
}
?>
                  
                

특별한 경우가 default 경우입니다. 이 케이스는 다른 케이스와 일치하지 않는 항목과 일치합니다. 예를 들어:

                  
<?php
switch ($i) {
    case 0:
        echo "i equals 0";
        break;
    case 1:
        echo "i equals 1";
        break;
    case 2:
        echo "i equals 2";
        break;
    default:
       echo "i is not equal to 0, 1 or 2";
}
?>
                  
                

참고: 기본 케이스가 여러 개이면 E_COMPILE_ERROR 오류가 발생합니다.

제어 구조에 대한 대체 구문은 스위치에서 지원됩니다. 자세한 내용은 제어 구조에 대한 대체 구문을 참조하세요.

                  
<?php
switch ($i):
    case 0:
        echo "i equals 0";
        break;
    case 1:
        echo "i equals 1";
        break;
    case 2:
        echo "i equals 2";
        break;
    default:
        echo "i is not equal to 0, 1 or 2";
endswitch;
?>
                  
                

다음과 같은 경우 콜론 대신 세미콜론을 사용할 수 있습니다.

                  
<?php
switch($beer)
{
    case 'tuborg';
    case 'carlsberg';
    case 'heineken';
        echo 'Good choice';
        break;
    default;
        echo 'Please make a new selection...';
        break;
}
?>