PHP에서 변수는 스크립트 내 어느 곳에서나 선언할 수 있습니다.
변수의 유효 범위(variable scope)란 특정 변수를 참조되거나 사용할 수 있는 스크립트 내의 범위를 의미합니다.
PHP에서는 이러한 변수의 유효 범위에 따라 변수의 종류를 다음과 같이 구분합니다.
- 지역 변수(local variable)
- 전역 변수(global variable)
- 정적 변수(static variable)
함수 내부에서 선언된 변수는 오직 함수 내부에서만 접근할 수 있습니다.
또한, 함수 내부에서 선언된 변수는 함수의 호출이 종료되면 메모리에서 제거됩니다.
이렇게 함수 내부에서 선언된 변수를 지역 변수(local variable)라고 합니다.
함수 밖에서 선언된 변수는 함수 밖에서만 바로 접근할 수 있습니다.
함수 밖에서 선언된 변수를 함수 내부에서 접근하고자 할 때는 global 키워드를 함께 사용해야 합니다.
이렇게 함수 밖에서 선언된 변수를 전역 변수(global variable)라고 합니다.
$var = 10;// 전역 변수로 선언함
function varFunc() {
echo "함수 내부에서 호출한 전역 변수 var의 값은 {$var}입니다.
global $var; // 함수 내에서 사용할 전역 변수를 명시함
echo "함수 내부에서 호출한 전역 변수 var의 값은 {$var}입니다.
}
varFunc();
echo "함수 밖에서 호출한 전역 변수 var의 값은 {$var}입니다.";
PHP는 모든 전역 변수를 $GLOBALS 배열에 저장합니다.
이 배열에 인덱스로 변수의 이름을 사용하면, 해당 전역 변수의 값에 접근할 수 있습니다.
이 배열은 함수 내부에서도 접근할 수 있으며, 이 배열을 통해 바로 전역 변수의 값을 변경할 수도 있습니다.
$var = 10; // 전역 변수로 선언함
function varFunc() {
echo "함수 내부에서 호출한 전역 변수 var의 값은 {$var}입니다.<br>";
echo "함수 내부에서 호출한 전역 변수 var의 값은 {$GLOBALS['var']}입니다.<br>";
}
varFunc();
echo "함수 밖에서 호출한 전역 변수 var의 값은 {$var}입니다.";
PHP는 미리 정의된 전역 변수인 슈퍼 글로벌(superglobal)을 제공합니다.
이러한 슈퍼 글로벌은 특별한 선언 없이 스크립트 내의 어디에서라도 바로 사용할 수 있습니다. PHP에서 제공하는 슈퍼 글로벌은 다음과 같습니다.
1. $GLOBALS
2. $_SERVER
3. $_GET
4. $_POST
5. $_FILES
6. $_COOKIE
7. $_SESSION
8. $_REQUEST
9. $_ENV
정적 변수(static variable)란 함수 내부에서 static 키워드로 선언한 변수를 의미합니다.
함수 내부에서 선언된 정적 변수는 함수의 호출이 종료되더라도 메모리상에서 사라지지 않습니다.
하지만 지역 변수처럼 해당 함수 내부에서만 접근할 수 있습니다.