switch
switch구문은 연속적인 같은 표현식을 갖는
연속적인 IF구문과 비슷하다. 많은 경우, 하나의 변수(또는 표현식)으로
다른 많은 값과 비교할 필요가 있으며, 그 값이 동일한 코드의 파편들을
수행할 필요가 생기게 된다. 정확히 이런 목적을 위해 switch구문이
사용된다.
Note:
다른 언어와는 달리 continue문은
switch문에서 사용할수 있고, break문과 비슷하게 동작한다.
루프 내에 switch문을 포함하고 있고 바깥 루프의 다음 반복문으로 진행하고 싶다면
continue 2를 사용한다.
Note:
switch/case는 느슨한
비교를 하는 점에 주의하십시오.
다음 예제 코드들은 같은 일을 서로 다르게 표현한 것입니다. 하나는
if와 elseif문을 사용한 것이고, 다른
하나는 switch문을 사용했습니다:
Example #1 switch 구조
<?php
if ($i == 0) {
echo "i는 0";
} elseif ($i == 1) {
echo "i는 1";
} elseif ($i == 2) {
echo "i는 2";
}
switch ($i) {
case 0:
echo "i는 0";
break;
case 1:
echo "i는 1";
break;
case 2:
echo "i는 2";
break;
}
?>
Example #2 문자열을 사용하는 switch 구조
<?php
switch ($i) {
case "apple":
echo "i는 apple";
break;
case "bar"
echo "i는 bar";
break;
case "cake":
echo "i는 cake";
break;
}
?>
실수하지 않기 위해 switch문이 어떻게 동작하는지
이해할 필요가 있다. switch문은 한줄씩 수행된다
(실제는, 한구문씩). 처음에는 아무 코드도 수행되지 않는다.
switch 표현의 값과 일치하는 값을 가진
case 구문을 발견했을 때, PHP는 그 구분을 실행합니다.
PHP는 switch블록의 끝부분이 될때까지,
또는 break문와 첫번째 조우를 할때까지
구문을 계속 수행해 간다. 만약 각 case 구문 목록의 끝부분에
break문을 쓰지않는다면 PHP는 다음 case문으로 계속
진행하게 된다. 예를 들면 다음과 같다:
여기에서, $i가 0이라면, PHP는 모든 echo문을
실행합니다! $i가 1이라면, PHP는 마지막 두 echo문을
실행합니다. $i가 2일 때만, 원하는 동작('i는 2와 같다'
표시)을 합니다. 따라서, break을 잊어서는 안됩니다.
(어떤 경우에는 일부러 빠트릴 수 있어도, 잊지 마십시오)
switch구문에서, 조건문은 오직 한번만 평가되고
각 case문에서 결과가 비교되어진다.
elseif문에서는 조건문은 다시 평가된다. 조건문이
한번 이상의 비교가 필요한 복잡한 것이거나 거친(tight) 루프안에 있다면
switch문 좀 더 빠를것이다.
case에 대한 구문 목록은 비어있을수 있다. 이것은 단순히 다음 case문으로
제어권을 넘겨줄 뿐이다.
특별한 case가 바로 default case문이다. 이것은 다른
case문과 모두 조건이 맞지 않을때의 경우를 위한 것입니다. 예를 들면:
case의 표현식은 정수나 부동소수점 수와 문자열같은
단순형으로 평가되는 어던 표현식도 될수 있다. 여기에 단순형으로
재참조(dereference)되지 않는 배열이나 객체를 사용할수는 없다.
switch문을 위한 제어 구조의 대체 문법이 지원된다. 더 자세한 정보는
제어 구조의 대체 문법을 참고.
case 뒤에 세미콜론 대신 콜론을 쓸 수 있습니다: