변수 사용 범위 (Variable Scope)
로빈아빠
본문
변수가 사용가능한 곳은 그 변수가 선언된 곳 안에서 만이다. PHP 변수의 대부분은 한 개의 범위(single scope)만을 가지고 있다. 이 범위는 include나 require 파일에도 동일하게 적용된다. 예를들어 :
1
2 $a = 1;
3 include "b.inc";
4
위에서 $a변수는 b,inc 스크립트에서도 사용할 수 있다.
기본적으로 함수 안에서 선언된 것은 함수 안에서만 사용되는 지역 변수이다. 또한 함수 안에서 사용되는 함수들은 기본적으로 지역 변수라고 가정하고 찾게 된다. 예를 들어:
1
2 $a = 1; /* global scope */
3
4 Function Test () {
5 echo $a; /* reference to local scope variable */
6 }
7
8 Test ();
9
이 스크립트는 함수 안의 $a 변수를 지역변수로 가정하였고, 지역변수 $a에는 아무 값도 대입되지 않았기 때문에 아무런 출력도 나타나지 않는다. 이것은 C와는 약간 차이가 나는 부분이다. PHP에서 전역변수를 사용하려면 사용하고 싶은 전역 변수를 함수 안에 global 선언을 해 주어야 한다. 예를 들어 :
1
2 $a = 1;
3 $b = 2;
4
5 Function Sum () {
6 global $a, $b;
7
8 $b = $a + $b;
9 }
10
11 Sum ();
12 echo $b;
13
위의 스크립트는 "3"을 출력할 것이다. 함수 내에서 $a and $b를 global로 선언했으므로, 이 함수내의 $a, $b는 전역 변수를 참조하게 된다. 함수 내에서 다룰 수 있는 전역변수의 개수에는 제한이 없다.
전역 변수를 참조하는 두 번째 방법은 PHP에서 특별히 정의하고 있는 $GLOBALS라는 배열을 사용하는 것이다. 위의 예를 다음과 같이 바꿔 쓸 수 있다. :
1
2 $a = 1;
3 $b = 2;
4
5 Function Sum () {
6 global $a, $b;
7
8 $b = $a + $b;
9 }
10
11 Sum ();
12 echo $b;
13
$GLOBALS 배열은 변수이름이 Key가 되고, 그 변수의 내용이 값이 되는 원소를 가진 associative 배열이다.
변수 범위에서 또 다른 중요한 것은 정적 변수(static variable)이다. 정적 변수는 지역 함수 내에서만 존재하지만 지역 함수가 종료되어도 그 값을 읽어버리지 않고 가지고 있다. 다음 예를 보자 :
1
2 Function Test () {
3 $a = 0;
4 echo $a;
5 $a++;
6 }
7
위의 함수는 Test()를 부를 때 마다 $a가 0으로 대입되므로 0을 출력한다.
1
2 Function Test () {
3 static $a = 0;
4 echo $a;
5 $a++;
6 }
7
위의 함수는 Test()를 부를 때마다 처음에는 0, 다음에는 1, 그 다음에는 2하는 식으로 하나씩 증가된 수를 출력해 준다. 즉, $a의 값이 보존되는 것이다.
또한 정적 변수는 다음과 같이 recursion에서 반드시 필요하다. 재귀적인 함수는 자기 자신의 함수를 호출하는 것을 말한다. 재귀적인 함수를 사용할 때는 무한 루프에 빠질 수 있기 때문에 매우 주의를 요한다. 따라서 여러분은 재귀 호출을 끝내는 적절한 방법을 마련해 두어야 한다. 다음의 간단한 예제는 10번의 재귀적 호출을 한다. :
1
2 Function Test () {
3 static $a = 0;
4 echo $a;
5 $a++;
6 }
7
출처 : http://qdata.co.kr/bo/bbs/board.php?bo_table=pht&wr_id=24
1
2 $a = 1;
3 include "b.inc";
4
위에서 $a변수는 b,inc 스크립트에서도 사용할 수 있다.
기본적으로 함수 안에서 선언된 것은 함수 안에서만 사용되는 지역 변수이다. 또한 함수 안에서 사용되는 함수들은 기본적으로 지역 변수라고 가정하고 찾게 된다. 예를 들어:
1
2 $a = 1; /* global scope */
3
4 Function Test () {
5 echo $a; /* reference to local scope variable */
6 }
7
8 Test ();
9
이 스크립트는 함수 안의 $a 변수를 지역변수로 가정하였고, 지역변수 $a에는 아무 값도 대입되지 않았기 때문에 아무런 출력도 나타나지 않는다. 이것은 C와는 약간 차이가 나는 부분이다. PHP에서 전역변수를 사용하려면 사용하고 싶은 전역 변수를 함수 안에 global 선언을 해 주어야 한다. 예를 들어 :
1
2 $a = 1;
3 $b = 2;
4
5 Function Sum () {
6 global $a, $b;
7
8 $b = $a + $b;
9 }
10
11 Sum ();
12 echo $b;
13
위의 스크립트는 "3"을 출력할 것이다. 함수 내에서 $a and $b를 global로 선언했으므로, 이 함수내의 $a, $b는 전역 변수를 참조하게 된다. 함수 내에서 다룰 수 있는 전역변수의 개수에는 제한이 없다.
전역 변수를 참조하는 두 번째 방법은 PHP에서 특별히 정의하고 있는 $GLOBALS라는 배열을 사용하는 것이다. 위의 예를 다음과 같이 바꿔 쓸 수 있다. :
1
2 $a = 1;
3 $b = 2;
4
5 Function Sum () {
6 global $a, $b;
7
8 $b = $a + $b;
9 }
10
11 Sum ();
12 echo $b;
13
$GLOBALS 배열은 변수이름이 Key가 되고, 그 변수의 내용이 값이 되는 원소를 가진 associative 배열이다.
변수 범위에서 또 다른 중요한 것은 정적 변수(static variable)이다. 정적 변수는 지역 함수 내에서만 존재하지만 지역 함수가 종료되어도 그 값을 읽어버리지 않고 가지고 있다. 다음 예를 보자 :
1
2 Function Test () {
3 $a = 0;
4 echo $a;
5 $a++;
6 }
7
위의 함수는 Test()를 부를 때 마다 $a가 0으로 대입되므로 0을 출력한다.
1
2 Function Test () {
3 static $a = 0;
4 echo $a;
5 $a++;
6 }
7
위의 함수는 Test()를 부를 때마다 처음에는 0, 다음에는 1, 그 다음에는 2하는 식으로 하나씩 증가된 수를 출력해 준다. 즉, $a의 값이 보존되는 것이다.
또한 정적 변수는 다음과 같이 recursion에서 반드시 필요하다. 재귀적인 함수는 자기 자신의 함수를 호출하는 것을 말한다. 재귀적인 함수를 사용할 때는 무한 루프에 빠질 수 있기 때문에 매우 주의를 요한다. 따라서 여러분은 재귀 호출을 끝내는 적절한 방법을 마련해 두어야 한다. 다음의 간단한 예제는 10번의 재귀적 호출을 한다. :
1
2 Function Test () {
3 static $a = 0;
4 echo $a;
5 $a++;
6 }
7
출처 : http://qdata.co.kr/bo/bbs/board.php?bo_table=pht&wr_id=24
관련링크
댓글목록
등록된 댓글이 없습니다.