PHP - 참조 연산자 &

참조는 포인터와 비슷하지만 사실 전혀 다른 개념입니다.

그저 변수의 실질적 값이 담긴 공간에 그저 이름을 하나 더 부여할 뿐입니다.

hello 라는 변수에, Hello, world 라는 값이 담겨있고, 이 변수의 참조인 sayHello 라는 변수를 만들면 그저 Hello, world 라는 값이 담긴 메모리 공간에 이름이 하나 더 부여 될 뿐이라는 것 입니다.

그 말은 hello 변수와 sayHello 라는 변수는 같다는 이야기로 해석할 수 있습니다.

 

&

& 가호를 사용해 참조를 나타낼 수 있으며, 이는 위에서 언급한 바와 같이 이름을 하나더 부여하는 것과 같습니다.

그래서 sayHello 변수 값이 바꿧더니 hello 변수의 값도 변하는 효과가 나타난 것 입니다. 포인터와 헷갈려서는 안됩니다. 포인터는 주소 값을 가지고 있는 것 뿐입니다.

$hello = 'Hello, world';
$sayHello = &$hello;

$sayHello = "Who are You";
var_deump($sayHello) // "Who are you?"

 

(!) 주의사항 - 참조 반환하기

참조를 반환하는 경우는 많이 본 적 없지만, 반환할 수는 있습니다.

함수의 이름의 왼쪽에 & 기호를 적어주면 됩니다.

다만 남용하는 경우 코드가 지저분해질 뿐더러 버그가 발생할 가능성이 농후하므로 참조를 반환하는 행위는 가급적 하지 않는 것을 권장드립니다.

class MyClass
{
	public $message = 'Hello, world';

	public function &getMessage()
	{
		return $this->message;
	}
}

$myclass = new MuClass();

$syHello = & myclass->getMessage);
$sayHello = 'Bye';

var_dump($myclass->message); // Bye

 

  • share