참조 반환
참조 반환
이 페이지에서는 함수에서 참조를 반환(return by reference)하는 방법을 다룹니다. 참조를 반환하면 함수가 선택한 변수에 참조를 묶을 수 있어요. 성능을 위해 참조 반환을 쓰지는 말아야 한다는 점도 함께 알아봐요.
본문
참조로 반환하는 것은, 어떤 변수에 참조를 묶어야 할지 함수가 찾아내도록 하고 싶을 때 유용해요. 성능 향상을 위해 반환-참조(return-by-reference)를 사용하지는 마세요. 엔진이 스스로 자동 최적화해 주니, 타당한 기술적 이유가 있을 때만 참조를 반환하세요. 참조를 반환하려면 다음 문법을 사용해요.
<?php
class Foo
{
public $value = 42;
public function &getValue()
{
return $this->value;
}
}
$obj = new Foo();
$myValue = &$obj->getValue(); // $myValue is a reference to $obj->value, which is 42
$obj->value = 2;
echo $myValue; // Prints the new value of $obj->value, i.e. 2
반환된 참조를 사용하려면 반드시 참조 할당(reference assignment)을 써야 해요.
<?php
function &collector()
{
static $collection = array();
return $collection;
}
$collection = &collector();
// Now the $collection is a referenced variable that references the static array inside the function
$collection[] = 'foo';
print_r(collector());
위 예시의 출력은 다음과 같아요.
Array
(
[0] => foo
)
마지막으로, 같은 collector() 예시를 참조 할당 없이 사용하면 어떻게 되는지도 볼게요.
<?php
function &collector()
{
static $collection = array();
return $collection;
}
array_push(collector(), 'foo');