php
PHP - 참조 연산자
변수명과 변수값은 다릅니다. 그래서 변수명은 서로 달라도 같은 내용(변수값)을 가질 수 있습니다.
참조 연산자는 서로 다른 변수명에 변수내용을 그대로 복사할 수 있게 해줍니다.
참조란 $a와 $c는 완전히 동일한 작용을 하게 합니다.
이는 대입 연산자나 가변 변수와는 다릅니다. 전역변수의 참조를 보면 흥미로운 결과를 볼 수 있습니다.
함수 내에서도 참조할 수 있습니다.
함수 내의 참조는 함수 내에서만 동작합니다. 다음 예를 보겠습니다.
다음은 참조의 해제입니다.
이중 참조로 다른 결과물을 얻을 수 있습니다.
참조 연산자는 서로 다른 변수명에 변수내용을 그대로 복사할 수 있게 해줍니다.
<?php
$a = 1;
$b = 2;
$d = 3;
// $c 변수에 $b변수를 복사(참조)해 둡니다.
// 그래서 $c 변수와 $b 변수는 각각 2를 가지게 되었습니다.
$c = &$b;
// $c 변수와 $d 변수에 5를 대입합니다.
$c = $d = 5;
echo $c; // 결과: 5
echo "<br/>";
echo $b; // 결과: 5
echo "<br/>";
echo $d; // 결과: 5
echo "<br/>";
// $c 참조 변수에 8을 대입합니다.
$c = 8;
echo $c; // 결과: 8
echo "<br/>";
// $c의 참조가 $b이므로 동일 값을 가지게 됩니다.
echo $b; // 결과: 8
echo "<br/>";
// $d 변수는 단순히 5를 대입한 것이므로 참조가 아닙니다.
echo $d; // 결과: 5
?>
<?php
$a = 1;
$b = $a;
$c = &$a;
echo $b; // 결과: 1
echo $c; // 결과: 1
// 참조 변수에 5를 대입해 보겠습니다.
$a = 5;
echo $b; // 결과: 1
echo $c; // 결과: 5
?>
참조란 $a와 $c는 완전히 동일한 작용을 하게 합니다.
이는 대입 연산자나 가변 변수와는 다릅니다. 전역변수의 참조를 보면 흥미로운 결과를 볼 수 있습니다.
<?php
// http://127.0.0.1/test.php?var=test&php=habony&monster=write 로
// GET을 넘겼을 때의 예입니다.
print_r($_GET);
/*
결과:
Array
(
[var] => test
[php] => habony
[monster] => write
)
*/
// $_GET 변수를 $var 변수에 참조하면 같은 결과물을 얻을 수 있습니다.
$var = &$_GET;
print_r($var);
/*
결과:
Array
(
[var] => test
[php] => habony
[monster] => write
)
*/
?>
함수 내에서도 참조할 수 있습니다.
<?php
function foo(&$var){
$var++;
}
$a = 5;
foo($a); // 결과: 6
function bar(){
$a = &$GLOBALS['var'];
$a = "test";
return $a;
}
$var = 5;
echo bar(); // 결과: test
echo "<br/>";
echo $var; // 결과: test
?>
함수 내의 참조는 함수 내에서만 동작합니다. 다음 예를 보겠습니다.
<?php
function bar(){
$a = &$var;
$a = "test";
return $a;
}
$var = 5;
echo bar(); // 결과: test
echo "<br/>";
echo $var; // 결과: 5
?>
다음은 참조의 해제입니다.
<?php
$a = 1;
$b = &$a;
unset($a); // $a 변수의 삭제
echo $b; // 결과: 1
// unset으로 $a와 $b사이의 연결만을 끊습니다.
// $a에 대입한 것이므로 결과물은 참조하지 않습니다.
$a = 5;
echo $b; // 결과: 1
?>
이중 참조로 다른 결과물을 얻을 수 있습니다.
<?php
$a = 1;
$b = &$a;
$c = &$a;
unset($a); // $a 변수의 삭제
echo $b; // 결과: 1
// 5를 대입하여 새로운 결과값을 얻습니다.
$b = 5;
echo $b; // 결과: 5
echo $c; // 결과: 5
?>
0 댓글