Computer >> 컴퓨터 >  >> 프로그래밍 >> PHP

PHP 변수 범위(Scope) 완벽 가이드: 지역 변수, 전역 변수, global, static까지

PHP 변수 범위(Scope)란?

프로그래밍에서 변수 범위(scope)란 해당 변수에 접근할 수 있는 코드상의 유효 범위를 의미합니다. 일반적으로 루프나 함수 같은 구조가 없는 단순한 PHP 스크립트는 단일 범위(single scope)를 가집니다. 즉, 변수는 정의된 시점 이후부터 프로그램 전체에서 사용할 수 있습니다.

include/require로 포함된 스크립트와 변수 공유

메인 스크립트에서 정의한 변수는 include 또는 require 문으로 포함된 다른 스크립트에서도 그대로 사용할 수 있습니다. 아래 예제에서는 메인 스크립트에 test.php 파일을 포함시킵니다.

메인 스크립트:

<?php
$var=100;
include "test.php";
?>

포함되는 파일(test.php):

<?php
echo "testscript.php에서 \$var의 값 : " . $var;
?>

메인 스크립트를 실행하면 다음과 같은 결과가 출력됩니다.

testscript.php에서 $var의 값 : 100

지역 변수와 전역 변수

그러나 스크립트 안에 사용자 정의 함수가 있으면, 함수 내부의 변수는 지역(local) 범위를 가집니다. 따라서 함수 내부에서 정의된 변수는 함수 외부에서 접근할 수 없으며, 반대로 함수 외부(위쪽)에서 정의된 변수는 전역(global) 범위를 가집니다.

예제

<?php
$var=100; //전역 변수
function myfunction(){
    $var1="Hello"; //지역 변수
    echo "var=$var var1=$var1" . "\n";
}
myfunction();
echo "var=$var var1=$var1" . "\n";
?>

실행 결과

var= var1=Hello
var=100 var1=
PHP Notice: Undefined variable: var in line 5
PHP Notice: Undefined variable: var1 in line 8

여기서 주목할 점은 전역 변수가 함수 내부의 지역 범위에서 자동으로 사용 가능하지 않다는 것입니다. 마찬가지로 함수 내부의 변수도 외부에서 접근할 수 없습니다.

global 키워드

함수 내부(지역 범위)에서 전역 변수에 접근하려면 global 키워드를 사용해 명시적으로 선언해야 합니다.

예제

<?php
$a=10;
$b=20;
echo "함수 호출 전 a = $a b = $b" . "\n";
function myfunction(){
    global $a, $b;
    $c=($a+$b)/2;
    echo "함수 내부 a = $a b = $b c = $c" . "\n";
    $a=$a+10;
}
myfunction();
echo "함수 호출 후 a = $a b = $b c = $c";
?>

실행 결과

함수 호출 전 a = 10 b = 20
함수 내부 a = 10 b = 20 c = 15
PHP Notice: Undefined variable: c in line 13
함수 호출 후 a = 20 b = 20 c =

이제 전역 변수를 함수 내부에서 처리할 수 있게 되었습니다. 또한 함수 내부에서 전역 변수에 가한 변경 사항은 전역 네임스페이스에도 그대로 반영됩니다.

$GLOBALS 배열

PHP는 모든 전역 변수를 $GLOBALS라는 연관 배열(associative array)에 저장합니다. 변수 이름이 키(key), 값이 값(value)이 되는 키-값 쌍 형태입니다.

다음 PHP 스크립트에서는 $GLOBALS 배열을 사용해 전역 변수에 접근합니다.

예제

<?php
$a=10;
$b=20;
echo "함수 호출 전 a = $a b = $b" . "\n";
function myfunction(){
    $c=($GLOBALS['a']+$GLOBALS['b'])/2;
    echo "c = $c" . "\n";
    $GLOBALS['a']+=10;
}
myfunction();
echo "함수 호출 후 a = $a b = $b c = $c";
?>

실행 결과

함수 호출 전 a = 10 b = 20
c = 15
PHP Notice: Undefined variable: c in line 12
함수 호출 후 a = 20 b = 20 c =

static 변수

static 키워드로 선언된 변수는 함수가 호출될 때마다 초기화되지 않습니다. 대신 이전 호출 시의 값을 그대로 유지합니다.

예제

<?php
function myfunction(){
    static $x=0;
    echo "x = $x" . "\n";
    $x++;
}
for ($i=1; $i<=3; $i++){
    echo "함수 호출 :$i : ";
    myfunction();
}
?>

실행 결과

함수 호출 :1 : x = 0
함수 호출 :2 : x = 1
함수 호출 :3 : x = 2

마무리 정리

PHP의 변수 범위를 제대로 이해하면 예기치 않은 오류를 방지하고 더 깔끔한 코드를 작성할 수 있습니다. 핵심 내용을 요약하면 다음과 같습니다.

  • 함수 외부에서 정의된 변수는 전역 범위를 가지지만, 함수 내부에서 자동으로 접근되지 않습니다.
  • 함수 내부에서 전역 변수를 사용하려면 global 키워드 또는 $GLOBALS 배열을 활용하세요.
  • 함수 호출 간에 값을 유지해야 하는 경우에는 static 키워드를 사용하세요.