phpclass/객체정보2001. 3. 2. 14:34
참조 삭제 동작 원리
참조 삭제(unsetting references)하는 것은 변수명과 변수 내용의 연결을 끊어줄 뿐이지 변수 내용 자체를 삭제하지는 않습니다. 따라서 아래와 같이 $a 변수를 삭제하더라도 그 내용은 남아 있기 때문에 $b 변수를 계속 사용할 수 있습니다.
[code php;gutter:false] $a = 1000;
$b = &$a;
unset ($a); [/code]
< 참조와 삭제 >
< 심볼 테이블(unset전) >
변수명 변수값이 저장된 메모리 주소 설명
$a 0x6000 원본
$b 0x6000 참조
< 심볼 테이블(unset후) >
변수명 변수값이 저장된 메모리 주소 설명
$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]
실행결과는 아래와 같습니다.
---------
[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
Posted by 방글24