묻고답하기

질문1)

몇 일 전에 아래의 소스를 제시하고, 1번 소스는 정상실행이 되는데,
2번소스는 왜 무한루프가 걸리는지를 질문했었어요.
그 때의 소스를 보여드리자면,...

<1번소스>
1행 <?
2행 $a=70;
3행 while($a<=80){
4행          if($a<=80){
5행                  echo $a."<br>";
6행                  $a++;
7행                        }
8행               else{
9행                      break;
10행                    }
11행               }
12행 ?>

<2번소스>
1행 <?
2행 while($a<=80){
3행 $a=70;
4행          if($a<=80){
5행                  echo $a."<br>";
6행                  $a++;
7행                        }
8행               else{
9행                      break;
10행                    }
11행               }
12행 ?>

물론 여러분들은 알고 계시겠지만, 제가 알아낸 사항은 바로...~

while, for, if 등과 같은 조건식내에 있는 변수는 일반적인 변수와 같은
"정적변수"의 특성을 가지고 있고,
while, for, if 구문의 중괄호{} 안에 있는 변수들은 function xxx(){}와
같이 함수의 중괄호{}내에 있는 변수와 같이 한 번 실행되면, 사라지는
특성을 지닌 변수이다.

라는 것을 알아냈는데, 이와 관련된 사항을 말씀드리자면...

1행 <?
2행 while($a<=80){
3행 $a=70;
4행          if($a<=80){
5행                  echo $a."<br>";
6행                  $a++;
7행                        }
8행               else{
9행                      break;
10행                    }
11행               }
12행 ?>

이 소스내용 중에 3행의 $a=70; 앞에 static을 붙이면, 무한루프가 안 걸리고,
정상적으로 값이 70~80까지 출력이 된다는 거죠^^

그리고, 위의 소스를 함수로 표현해봤는데요,...

1행 <?
2행 function sum(){
3행                        $a=70;
4행                        echo $a."<br>";
5행                        $a++;
6행                        }
7행 sum():
8행 sum():
9행 sum():
10행 sum():
11행 sum():
12행 sum():
13행 sum():
14행 sum():
15행 sum():
16행 sum():
17행 sum():
18행 ?>

이와 같이 코딩을 했다면, 70이라는 값이 11번 출력되었겠지만, 만약 3행의
$a=70; 앞에 static을 붙이게 되면 70~80까지 출력이 되더라구요~^^
그래서...

while, for, if 구문의 중괄호{} 안에 있는 변수들은 function xxx(){}와
같이 함수의 중괄호{}내에 있는 변수와 같이 한 번 실행되면, 사라지는
특성을 지닌 변수이다.

라는 결론이 나더라구요...맞나요??

질문2)
제가 보고 있는 책에는 static 선언자는 오직 함수내에서만 사용된다고
나왔는데, 위에서 제가 설명한 것 처럼 구문내에서도 사용하는 것이
정상적인 방법인가요??