Computer >> 컴퓨터 >  >> 프로그래밍 >> PHP

PHP 참조 반환(Return by Reference) 완벽 가이드 – 함수와 메서드 활용법

PHP 참조 반환(Return by Reference)이란?

PHP에서는 함수가 값을 복사해 반환하는 대신 참조(reference) 자체를 반환하도록 정의할 수 있습니다. 이는 반환된 참조가 어떤 변수에 바인딩될지 지정해야 하는 상황에서 유용하게 사용됩니다.

참조를 반환하는 함수를 정의하는 방법은 간단합니다. 함수 이름 앞에 앰퍼샌드(&) 기호를 붙이면 됩니다. 단, 호출하는 쪽에서도 결과를 받을 때 &를 붙여 참조 할당을 해야 한다는 점에 유의하세요.

함수에서 참조 반환하기 – 기본 예제

아래 예제에서 myfunction()은 참조를 반환하도록 정의되었습니다. 함수 내부에는 정적(static) 변수 $x가 선언되어 있으며, 이 변수의 참조가 반환되어 전역 변수 $a에 할당됩니다. 함수 외부에서 $a에 다른 값을 할당하면 함수 내부의 정적 변수 값도 함께 변경됩니다. 두 변수가 동일한 메모리 공간을 공유하기 때문입니다.

<?php
function &myfunction(){
   static $x=10;
   echo "x Inside function: ",$x,"\n";
   return $x;
}
$a=&myfunction(); // 함수 내부의 $x에 대한 참조를 포함
echo "returned by reference: ", $a, "\n";
$a=$a+10; // 함수 내부 변수도 함께 증가
$a=&myfunction();
?>

실행 결과

위 예제를 실행하면 다음과 같은 출력을 얻습니다.

x Inside function: 10
returned by reference: 10
x Inside function: 20

$a에 10을 더했을 뿐인데, 함수 내부의 정적 변수 $x도 20으로 증가한 것을 확인할 수 있습니다. 이것이 참조 반환의 핵심 동작 방식입니다.

클래스 메서드에서 참조 반환하기

클래스의 메서드 역시 참조를 반환할 수 있습니다. 이를 활용하면 private으로 선언된 인스턴스 변수의 값을 클래스 외부에서 변경할 수 있습니다. 원래라면 외부에서 접근할 수 없는 private 프로퍼티지만, 참조 반환을 통해 우회적으로 접근이 가능해집니다.

<?php
class myclass{
   private $val;
   function __construct($x){
      $this->val=$x;
   }
   function &getbyref(){
      return $this->val;
   }
   function getbyval(){
      return $this->val;
   }
}
$a=new myclass(10);
$b=&$a->getbyref();
$b=100;
echo "Value of private property: ", $a->getbyval();
?>

실행 결과

위 스크립트의 실행 결과는 다음과 같습니다.

Value of private property: 100

getbyref() 메서드로 얻은 참조 $b에 100을 할당했을 뿐인데, private 프로퍼티 $val의 값이 100으로 변경된 것을 확인할 수 있습니다.

참조 반환 사용 시 주의사항

참조 반환은 강력한 기능이지만 남용하면 코드의 가독성과 유지보수성이 떨어질 수 있습니다. PHP 공식 매뉴얼에서도 성능상 큰 이점이 없으므로 꼭 필요한 경우가 아니라면 일반적인 값 반환을 사용할 것을 권장합니다. 대량의 데이터 구조를 다루거나 특정 변수 바인딩이 필요한 특수한 상황에서만 신중하게 사용하는 것이 좋습니다.