PHP에서 break의 선택사항성
명령어 break는 선택사항입니다.
그러나 이 명령어가 없으면, case 블록들의
동작이 예상과 다를 수 있습니다. 예제를 통해 살펴보겠습니다.
다음과 같은 코드가 있다고 가정해 봅시다:
<?php
$num = 1;
switch ($num) {
case 1:
echo 1;
break;
case 2:
echo 2;
break;
case 3:
echo 3;
break;
}
?>
이 코드에서 모든 break를 제거하고, 변수
$num에 먼저 숫자 3을 넣어보겠습니다.
아직까지는 모든 것이 기존과 같이 작동합니다:
<?php
$num = 3; // 여기에 숫자 3을 넣었습니다
switch ($num) {
case 1:
echo 1;
case 2:
echo 2;
case 3:
echo 3;
}
// 실행 후 코드는 3을 출력합니다 - 모든 것이 정상입니다
?>
이제 변수 $num에 숫자 2를 넣어보겠습니다.
이 경우 예상대로 case 2가 실행되고, 그런 다음 예상치 못하게
case 3도 실행됩니다:
<?php
$num = 2;
switch ($num) {
case 1:
echo 1;
case 2:
echo 2;
case 3:
echo 3;
}
// 실행 후 코드는 2를 출력하고, 그 다음 3을 출력합니다
?>
만약 변수 $num에 숫자 1를 넣으면,
모든 case 구문이 실행됩니다:
<?php
$num = 1;
switch ($num) {
case 1:
echo 1;
case 2:
echo 2;
case 3:
echo 3;
}
// 실행 후 코드는 1을 출력하고, 그 다음 2를, 그 다음 3을 출력합니다
?>
즉, break가 없으면 의도한 case가 실행된 후,
그 아래에 있는 모든 case도 실행된다는 것을 알 수 있습니다. 때로는
이러한 특성을 문제 해결에 사용하기도 합니다.
다음 예제에서, 변수 $num의 값이 1이거나 2이면
변수 $res에 'a'가 기록됩니다.
반면 변수 $num의 값이 3이면 변수 $res에
'b'가 기록됩니다:
<?php
$num = 1;
switch ($num) {
case 1:
case 2:
$res = 'a';
break;
case 3:
$res = 'b';
break;
}
echo $res;
?>
위에서, 저는 때로는 이러한 특성을 사용한다고 썼지만, 사실 코드가 그리 명확하지 않게 되기 때문에 사용하는 것을 권장하지는 않습니다.
이런 문제는 if 문을 통해 훨씬 더 명확하게 해결할 수 있습니다:
<?php
$num = 1;
if ($num == 1 or $num == 2) {
$res = 'a';
}
if ($num == 3) {
$res = 'b';
}
echo $res;
?>