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

PHP 참조 메커니즘 이해하기: unset과 전역 변수의 동작 원리


개요

PHP의 많은 문법 구조는 내부적으로 참조(reference) 메커니즘을 통해 구현됩니다. 중요한 특징 중 하나는, 함수 내부에서 unset()을 사용하여 전역 변수에 대한 참조를 해제하더라도 전역 네임스페이스에 존재하는 원래 변수 자체는 삭제되지 않는다는 점입니다. 즉, 참조만 끊어질 뿐 원본 변수는 그대로 유지됩니다.

예제 코드

아래 예제는 함수 안에서 전역 변수를 참조하고, 값을 변경한 뒤 참조를 해제하는 과정을 보여줍니다.

<?php
$var1 = 'Hello World';
function myfunction(){
    global $var1;
    $var2 =&$var1;
    echo "$var1, $var2 \n";
    $var2="Hello PHP";
    echo "$var1, $var2 \n";
    unset($var1);
}
myfunction();
echo "$var1\n";
?>

실행 결과

함수 내에서 unset($var1)이 호출되었지만, 이는 함수 스코프 내의 지역 참조만 제거하는 것이므로 전역 변수 $var1은 그대로 유지됩니다.

Hello World, Hello World
Hello PHP, Hello PHP
Hello PHP

참조 상태 확인 방법

특정 변수가 다른 변수들과 참조 관계에 있는지 확인하고 싶다면 debug_zval_dump() 함수를 활용할 수 있습니다. 이 함수는 변수의 내부 zval 구조 정보(값, 데이터 타입, refcount 등)를 출력해 주므로, 참조가 어떻게 공유되고 있는지 디버깅할 때 매우 유용합니다.