Variable scope

Programming/PHP 2006. 9. 22. 18:23

변수 유효영역 (Variable scope)

변수의 유효영역은 변수가 정의된 환경을 말한다.
대부분의 경우 모든 PHP 변수는 한 곳의 유효영역만을 갖는다.
한 곳의 유효영역은 include되거나 require된 파일로도 확장된다. 예를 들면:

<?php
$a = 1;
include "b.inc";
?>

위 예제코드에서는 include된 b.inc 스크립트안에서도 $a 변수가 사용가능하다.
하지만, 사용자-선언 함수에서는 로컬 함수 유효영역이 적용된다.
함수내에서 사용되는 모든 변수는 기본값으로 로컬 변수 유효영역 안에 제한된다. 예를 들면:

<?php
$a = 1;  /* 전역 유효 범위 */

function Test()
{
   echo $a;  /* 로컬 변수에 참조 */
}

Test();
?>

위 스크립트에서 echo문이 $a의 로컬 버전을 참조하고, 이 영역 안에서 값을 지정되지 않았기 때문에 아무것도 출력되지 않는다.
PHP에서 전역변수가 함수내에서 계속 사용이 된다면 함수안에서 global로 선언해야 한다.


global 키워드

<?php
// global 사용
$a = 1;
$b = 2;

function Sum()
{
  global $a, $b;
  $b = $a + $b;
}

Sum();
echo $b;
?>

위 스크립트는 "3"를 출력한다.
$a와 $b를 함수내에서 global로 선언하여, 각 변수에 대한 모든 참조가 전역 버전으로 참조된다.
함수에서 조작되는 전역변수의 수는 제한이 없다.
전역 유효영역의 변수에 접근할 수 있는 두번째 방법이 특별 PHP-선언 $GLOBALS 배열을 사용하는 것이다.

<?php
// $GLOBALS 배열 사용
$a = 1;
$b = 2;

function Sum()
{
  $GLOBALS["b"] = $GLOBALS["a"] + $GLOBALS["b"];
}

Sum();
echo $b;
?>

$GLOBALS은 전역변수명이 key가 되는 연관배열이고 배열의 요소 값이 그 변수의 내용이 된다.
$GLOBALS이 슈퍼전역변수이기 때문에 모든 유효영역에서 존재한다.

<?php
// 자동 전역과 영역 이해

function test_global()
{
  // 대부분의 예약 변수는 "자동 전역"이 아니므로
  // 함수 내부 영역에서 사용하려면 'global'이 필요하다.
  global $HTTP_POST_VARS;

  echo $HTTP_POST_VARS['name'];

  // 자동 전역은 어떠한 영역에서도 사용할 수 있고, 'global'이 필요하지 않다.
  // 자동 전역은 PHP 4.1.0부터 사용할 수 있다.
  echo $_POST['name'];
}
?>

WRITTEN BY
손가락귀신
정신 못차리면, 벌 받는다.

,