본문 바로가기
프로그래밍/PHP

변수앞에 & 를 붙여서 사용하면 어떻게 될까?

by 베리베리 2008. 8. 19.

[PHP] 변수앞에 & 를 붙여서 사용하면 어떻게 될까?
(c)2008 가치있는 삶
http://berry2.tistory.com

PHP는 포인터가 없지만 변수앞에 &를 붙여서 값이 복사되는 것이 아니라 참조되게 만들 수 있다.
이 참조라는 기능이 정확히 뭔지는 모르겠지만, 내가 아는대로 설명하면

1. 변수에서 참조 사용
예를들어서 아래와 같이

$a=&$b;

이렇게 했을경우에 $b와 $a 는 완전히 동일하다.
$b가 이름만 $a로 바뀐 것이라고 생각하면 된다.

따라서, 아래처럼..

$b=10;

이렇게 b의 값을 변경시키면 $a의 값도 함께 변한다.
즉, a의 값은 10 이다.
만일 이때,

$c=$b;

이렇게 하면 어떻게 될까?
이것은 $c=10 이라는 뜻이다. 여기에서는 참조가 아니기때문에
아래처럼

$c=20;

이렇게 c의 값을 변경시켜도 a 와 b 의 값은 변하지 않는다.
변하게 하고 싶었다면..

$c=&$b;

이렇게 했어야 한다.


2. 함수에서 참조 사용
이제는 함수에서 참조 사용하는 방법을 알아보자!

function f(&$d){
    $d=20;
}

이런 함수를 만들고

$x=10;
f($x);
echo $x;

이렇게 하면 함수 f 가 호출되면서
$d=&$x; 가 실행되기때문에
f 함수안에서 $d=20; 이 실행되면
$x의 값도 20으로 변한다.
결과는 20이 출력된다.

그런데 이런식으로 함수를 정의하지 않았는데도 함수 호출시에 위와같은 효과를 얻고 싶다면? 어떻게 할까?
예를들어서

function ff ($d){
    $d=50;
}

이런 함수가 있는데

$x=10;
ff($x);
echo $x;

이런 코드가 있고..
이 상태에서 실행하면 당연히 10이 출력되지만
& 를 붙이는 것만으로도, $x의 값을 50으로 만들 수 있다.
어떻게 할까?

$x=10;
ff(&$x);
echo $x;

이렇게 하면 된다. ^-^
단지 ff 호출시에 넘기는 변수앞에 &를 붙이면 끝이다.
이것은 코드로 변환될때

$d=&$x;

이렇게 처리된다.

수고하셨습니다^-^

댓글