개요
PHP에서는 unset() 함수를 사용해 변수와 값(내용) 사이의 바인딩을 끊을 수 있습니다. 여기서 중요한 점은 unset()이 값을 소멸시키는 것이 아니라, 변수와 값 사이의 연결만 분리한다는 사실입니다. 따라서 다른 변수가 같은 값을 계속 참조하고 있다면 그 값은 그대로 유지됩니다.
예제 1: unset()으로 참조 해제
<?php $a = 10; $b = &$a; echo "before unsetting : ", $a, " ", $b, PHP_EOL; unset($b); echo "after unsetting :" . $a . " "; $b = 20; echo $b; ?>
출력 결과
unset($b)가 실행되면 $b와 값 사이의 참조 관계만 제거됩니다. 이후 $b는 일반 변수처럼 새로운 값을 자유롭게 할당받을 수 있으며, $a는 여전히 원래 값인 10을 유지합니다.
before unsetting : 10 10 after unsetting :10 20
NULL 할당과 참조의 관계
그렇다면 참조된 변수에 NULL을 할당하면 참조가 제거될까요? 결론부터 말하면 그렇지 않습니다. 참조된 변수에 값을 할당하면 두 변수가 공유하는 값 자체가 변경됩니다. 다음 예제로 직접 확인해 보겠습니다.
예제 2: 참조 상태에서 NULL 할당하기
<?php $x = 100; $y = &$x; echo "x and y are references ", $x, " ", $y, PHP_EOL; $y = NULL; $x = 200; echo "x: ", $x . " y: ", $y, PHP_EOL; ?>
출력 결과
$y에 NULL을 할당하면 $x와 $y가 공유하는 값이 함께 NULL이 됩니다. 이후 $x에 200을 할당하면 두 변수 모두 200을 출력합니다. 이는 NULL 할당이 참조 연결을 끊는 것이 아니라 공유된 값을 변경할 뿐임을 보여줍니다. 변수 간의 참조 연결을 완전히 제거하려면 unset() 함수를 사용해야 합니다.
x and y are references 100 x: 200 y: 200