사이트 내 전체검색
PHP
변수 사용 범위 (Variable Scope)
로빈아빠
https://cmd.kr/php/186 URL이 복사되었습니다.

본문

변수가 사용가능한 곳은 그 변수가 선언된 곳 안에서 만이다. 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

댓글목록

등록된 댓글이 없습니다.

PHP
871 (16/18P)

Search

Copyright © Cmd 명령어 18.222.56.71