참조 반환하기

참조로 반환하는 것은 참조가 바인딩되어야 하는 변수를 찾기 위해 함수를 사용하려는 경우에 유용합니다. 성능 향상을 위해 참조에 의한 반환을 사용하지 마십시오. 엔진은 이를 자동으로 최적화합니다. 유효한 기술적인 이유가 있는 경우에만 참조를 반환하십시오. 참조를 반환하려면 다음 구문을 사용하세요.

                  
<?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.
?>
                  
                

이 예에서 참조 구문을 사용하지 않는 것처럼 getValue 함수에서 반환된 객체의 속성은 복사본이 아니라 설정됩니다.

메모: 매개변수 전달과 달리 여기에서는 복사본이 아닌 참조로 반환하려는 것을 나타내고 $myValue에 대해 일반적인 할당 대신 참조 바인딩을 수행해야 함을 나타내기 위해 두 위치 모두에서 &를 사용해야 합니다.

메모: 다음 구문을 사용하여 함수에서 참조를 반환하려고 하면 return ($this->value); 이것은 참조에 의해 변수가 아니라 표현식의 결과를 반환하려고 할 때 작동하지 않습니다. 함수에서 참조로만 변수를 반환할 수 있습니다. 다른 것은 없습니다.

반환된 참조를 사용하려면 참조 할당을 사용해야 합니다.

                  
<?php
function &collector() {
  static $collection = array();
  return $collection;
}
$collection = &collector();
$collection[] = 'foo';
?>
                  
                

참조를 기대하는 다른 함수에 반환된 참조를 전달하려면 다음 구문을 사용할 수 있습니다.

                  
<?php
function &collector() {
  static $collection = array();
  return $collection;
}
array_push(collector(), 'foo');
?>
                  
                

참고: array_push(&collector(), 'foo'); 작동하지 않으면 치명적인 오류가 발생합니다.