참조 반환

참조 반환

이 페이지에서는 함수에서 참조를 반환(return by reference)하는 방법을 다룹니다. 참조를 반환하면 함수가 선택한 변수에 참조를 묶을 수 있어요. 성능을 위해 참조 반환을 쓰지는 말아야 한다는 점도 함께 알아봐요.

출처: Returning References

본문

참조로 반환하는 것은, 어떤 변수에 참조를 묶어야 할지 함수가 찾아내도록 하고 싶을 때 유용해요. 성능 향상을 위해 반환-참조(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');

더 알아보기