goto

(PHP 5 >= 5.3.0, PHP 7, PHP 8)

goto를 사용하면 일어날 수 있는 더 나쁜 일은 무엇입니까?

» xkcd의 이미지 제공

goto 연산자를 사용하여 프로그램의 다른 섹션으로 이동할 수 있습니다. 대상 지점은 대소문자를 구분하는 레이블과 콜론으로 지정되며 명령은 원하는 대상 레이블이 뒤에 오는 goto로 제공됩니다. 이것은 완전한 무제한 goto가 아닙니다. 대상 레이블은 동일한 파일 및 컨텍스트 내에 있어야 합니다. 즉, 함수 또는 메서드 밖으로 이동할 수 없으며 해당 항목으로 이동할 수도 없습니다. 또한 모든 종류의 loop 또는 switch 구조로 이동할 수 없습니다. 여기서 이동할 수 있으며 일반적인 용도는 다중 수준 break 대신 goto를 사용하는 것입니다.

예제 #1 goto 예제

                  
<?php
goto a;
echo 'Foo';

a:
echo 'Bar';
?>
                  
                

위의 예는 다음을 출력합니다.

Bar
                

예제 #2 goto loop 예제

                  
<?php
for($i=0,$j=50; $i<100; $i++) {
  while($j--) {
    if($j==17) goto end;
  }
}
echo "i = $i";
end:
echo 'j hit 17';
?>
                  
                

위의 예는 다음을 출력합니다.

j hit 17
                

예제 #3 이것은 작동하지 않습니다

                  
<?php
goto loop;
for($i=0,$j=50; $i<100; $i++) {
  while($j--) {
    loop:
  }
}
echo "$i = $i";
?>
                  
                

위의 예는 다음을 출력합니다.

Fatal error: 'goto' into loop or switch statement is disallowed in
script on line 2