변수명과 변수값은 다릅니다. 그래서 변수명은 서로 달라도 같은 내용(변수값)을 가질 수 있습니다.
참조 연산자는 서로 다른 변수명에 변수내용을 그대로 복사할 수 있게 해줍니다.
<?php
$a = 1;
$b = 2;
$d = 3;
$c = &$b;
$c = $d = 5;
echo $c;
echo "
";
echo $b;
echo "
";
echo $d;
echo "
";
$c = 8;
echo $c;
echo "
";
echo $b;
echo "
";
echo $d;
?>
<?php
$a = 1;
$b = $a;
$c = &$a;
echo $b;
echo $c;
$a = 5;
echo $b;
echo $c;
?>
참조란 $a와 $c는 완전히 동일한 작용을 하게 합니다.
이는 대입 연산자나 가변 변수와는 다릅니다. 전역변수의 참조를 보면 흥미로운 결과를 볼 수 있습니다.
<?php
print_r($_GET);
$var = &$_GET;
print_r($var);
?>
함수 내에서도 참조할 수 있습니다.
<?php
function foo(&$var){
$var++;
}
$a = 5;
foo($a);
function bar(){
$a = &$GLOBALS['var'];
$a = "test";
return $a;
}
$var = 5;
echo bar();
echo "
";
echo $var;
?>
함수 내의 참조는 함수 내에서만 동작합니다. 다음 예를 보겠습니다.
<?php
function bar(){
$a = &$var;
$a = "test";
return $a;
}
$var = 5;
echo bar();
echo "
";
echo $var;
?>
다음은 참조의 해제입니다.
<?php
$a = 1;
$b = &$a;
unset($a);
echo $b;
$a = 5;
echo $b;
?>
이중 참조로 다른 결과물을 얻을 수 있습니다.
<?php
$a = 1;
$b =& $a;
$c =& $a;
unset($a);
echo $b;
$b = 5;
echo $b;
echo $c;
?>