참조 삭제 동작 원리
참조 삭제(unsetting references)하는 것은 변수명과 변수 내용의 연결을 끊어줄 뿐이지 변수 내용 자체를 삭제하지는 않습니다. 따라서 아래와 같이 $a 변수를 삭제하더라도 그 내용은 남아 있기 때문에 $b 변수를 계속 사용할 수 있습니다.
[code php;gutter:false]
$a = 1000;
$b = &$a;
unset ($a); [/code]
$b = &$a;
unset ($a); [/code]
변수명 | 변수값이 저장된 메모리 주소 | 설명 |
---|---|---|
$a | 0x6000 | 원본 |
$b | 0x6000 | 참조 |
변수명 | 변수값이 저장된 메모리 주소 | 설명 |
---|---|---|
$b | 0x6000 | 참조 |
global References
전역변수를 선언하면 이 변수는 자동으로 전역배열 $GLOBALS[]에 참조됩니다. 이것은 마치 아래와 같은 문장를 수행한 것과 같습니다.
[code php;gutter:false]
$var = &$GLOBALS["var"];
[/code]
그런데 매뉴얼 설명과는 달리 unset으로 전역변수를 삭제하면 전역배열 $GLOBALS[]의 내용도 함께 삭제되는 것을 확인할 수 있었습니다. 아래의 예제를 참조바랍니다.
[code php;gutter:false]
<?php
$a = "set variable";
$b = &$a;
echo "---------\n";
echo "[".$a."]\n";
echo "[".$GLOBALS["a"]."]\n";
echo "[".$b."]\n";
unset($b);
echo "---------\n";
echo "[".$a."]\n";
echo "[".$GLOBALS["a"]."]\n";
echo "[".$b."]\n";
unset($a);
//unset($GLOBALS["a"]);
echo "---------\n";
echo "[".$a."]\n";
echo "[".$GLOBALS["a"]."]\n";
echo "[".$b."]\n";
echo "---------\n";
?> [/code]
$a = "set variable";
$b = &$a;
echo "---------\n";
echo "[".$a."]\n";
echo "[".$GLOBALS["a"]."]\n";
echo "[".$b."]\n";
unset($b);
echo "---------\n";
echo "[".$a."]\n";
echo "[".$GLOBALS["a"]."]\n";
echo "[".$b."]\n";
unset($a);
//unset($GLOBALS["a"]);
echo "---------\n";
echo "[".$a."]\n";
echo "[".$GLOBALS["a"]."]\n";
echo "[".$b."]\n";
echo "---------\n";
?> [/code]
실행결과는 아래와 같습니다.
---------
[set variable]
[set variable]
[set variable]
---------
[set variable]
[set variable]
[] <-- unset($b)로 삭제됨
---------
[] <-- unset($a)로 삭제됨
[] <-- unset($a)로 삭제됨
[]
---------
[set variable]
[set variable]
[set variable]
---------
[set variable]
[set variable]
[] <-- unset($b)로 삭제됨
---------
[] <-- unset($a)로 삭제됨
[] <-- unset($a)로 삭제됨
[]
---------
'phpclass > 객체정보' 카테고리의 다른 글
{네임스페이스}1.네임스페이스란? (0) | 2008.08.09 |
---|---|
What Is an Interface? (0) | 2005.10.25 |
{참조}4.참조 반환 (0) | 2001.03.02 |
{참조}3.참조에 의한 전달 (0) | 2001.03.02 |
{참조}2.객체생성에서의 참조 (0) | 2001.03.02 |