변수의 범위
PHP에서 글로벌 변수(전역 변수)와 로컬 변수(지역 변수)는 선언 위치에 따라 사용 범위가 달라집니다. 이 글에서는 차이와 활용 방법을 쉽고 명확하게 설명합니다.
변수의 범위란?
PHP에서 변수의 범위(scope)는 변수가 어디에서 접근 가능한지를 의미합니다.
- 글로벌 변수(Global Variable, 전역 변수): 스크립트 전체에서 유효한 변수입니다.
- 로컬 변수(Local Variable, 지역 변수): 자신이 포함된 함수 안에서만 유효한 변수입니다.
글로벌 변수 예제
$x = 10; // 글로벌 변수
function showGlobal() {
global $x;
echo $x; // 출력: 10
}
showGlobal();
echo $x; // 출력: 10
로컬 변수 예제
function showLocal() {
$y = 20; // 로컬 변수
echo $y; // 출력: 20
}
showLocal();
// echo $y; // 오류: 함수 밖에서는 접근 불가
글로벌 변수
글로벌 변수는 '전역 변수'라고도 하며, 스크립트 전체에서 유효한 변수입니다.
즉, 함수 내부 또는 외부 어디에서든 해당 변수를 사용할 수 있습니다. 단, 함수 내부에서 사용하려면 global
키워드나 $GLOBALS
배열을 통해 접근해야 합니다.
특징
- 함수 외부에서 선언된 변수는 기본적으로 글로벌 변수입니다.
- 함수 외부에서 선언된 글로벌 변수를 함수 내에서 사용하려면 변수명 앞에
global
와 함께 사용해야 합니다. 예를 들어global $var
와 같이 사용합니다. - 함수 내에서도 글로벌 변수를 선언할 수 있습니다. 이 때에도 변수명 앞에
global
와 함께 사용해야 합니다. - PHP에서 미리 정의된 모든 변수는 글로벌 변수입니다. 대표적으로 슈퍼글로벌 변수가 있습니다.
함수 외부에서 선언된 변수
함수 외부에서 선언된 변수는 기본적으로 글로벌 변수입니다.
함수 외부에서 선언된 글로벌 변수를 함수 내에서 사용하려면 변수명 앞에 global
와 함께 사용해야 합니다. 예를 들어 global $var
와 같이 사용합니다.
예제
$a = 10; // 글로벌 변수
function test() {
// 함수 외부에서 선언된 글로벌 변수를 사용
global $a; // global 키워드와 함께 사용
echo $a; // 출력: 10
}
test();
함수 내부에서 글로벌 변수 선언
함수 내부에서도 global
키워드를 사용하면 새로운 글로벌 변수를 선언할 수 있습니다.
이때, 값은 별도로 할당해야 하며, global $y = 100;
처럼 동시에 선언과 할당은 불가능합니다.
function setGlobal() {
global $y; // 함수 내부에서 글로벌 변수 선언
$y = 100; // 글로벌 함수에 값을 할당
}
setGlobal();
echo $y; // 출력: 100
function setGlobal() {
global $y = 100; // 오류: PHP에서는 global 선언과 값 할당을 동시에 할 수 없습니다.
// global은 변수와 글로벌 영역을 연결하는 역할만 합니다.
// 값 할당은 반드시 별도로 해야 합니다.
}
PHP에서 미리 정의된 모든 변수는 글로벌 변수
PHP에서 미리 정의된 모든 변수는 글로벌 변수입니다. 대표적으로 슈퍼글로벌 변수(대표적으로 $_GET
, $_POST
, $_SESSION
, $_SERVER
등)가 있습니다.
function current() {
echo $_SERVER['PHP_SELF']; // 현재 스크립트 경로 출력
}
current();
로컬 변수
로컬 변수는 '지역 변수'라고도 하며, 이 변수를 선언한 함수 내에서만 유효한 변수입니다.
즉, 함수 외부에서는 접근할 수 없습니다.
특징
- 함수 내부에서 선언되며, 함수 외부에서는 접근할 수 없습니다.
- 함수 실행이 끝나면 메모리에서 사라집니다.
- 이름 충돌을 방지하고, 함수 단위로 데이터를 안전하게 다룰 수 있습니다
- 로컬 변수를 글로벌 변수처럼 사용하려고 하면 오류가 발생합니다.
함수 내부에서만 접근 가능
로컬 변수는 자신이 포함된 함수 안에서만 유효한 변수입니다.
함수 외부에서는 접근할 수 없습니다.
예제
function showLocal() {
$a = 30; // 로컬 변수
echo $a; // 출력: 30
}
showLocal();
// echo $a; // ❌ 오류: 함수 밖에서는 접근 불가
함수 내부에서 로컬 변수와 글로벌 변수 구분
같은 이름이라도 함수 안에서 로컬 변수를 선언하면, 글로벌 변수와는 별개의 변수가 됩니다.
$c = 100; // 글로벌 변수
function testScope() {
$c = 200; // 함수 내부 로컬 변수
echo $c; // 출력: 200 (로컬 변수 사용)
}
testScope();
echo $c; // 출력: 100 (글로벌 변수는 그대로)