백엔드
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
0개 댓글