$참조변수 = &$원래변수;
// 원래 변수
$a = 10;

// 참조 변수 생성
$b = &$a; // $b는 $a를 참조하는 별명(alias)입니다.

// 원래 변수의 값을 변경
$a = 20;

// 참조 변수의 값도 변경됨
echo $b; // 20

// 참조 변수의 값을 변경
$b = 30;

// 원래 변수의 값도 변경됨
echo $a; // 30
/* 참조 변수를 사용한 사용자 정의 함수 예제 */

// 배열을 매개변수로 받는 함수 정의
// & 기호를 사용하여 참조 변수로 전달
function addOne(&$arr) { // &$arr : 참조 변수로 전달됨
    // 배열의 각 요소를 1씩 증가
    foreach ($arr as &$value) {
        $value += 1;
    }
}

// 원래 배열
$numbers = [1, 2, 3];

// 함수 호출: 참조로 전달
addOne($numbers);

// 함수 안에서 값이 바뀌었으므로, 원본 배열도 변경됨
print_r($numbers);
/*
출력:
Array
(
    [0] => 2
    [1] => 3
    [2] => 4
)
*/
// 상황 1: 큰 데이터를 다룰 때 메모리 효율
$bigArray = range(1, 1000000);   // 큰 배열 생성
$aliasArray = &$bigArray;        // 참조 변수로 별명 생성

$aliasArray[0] = 999;            // 값 변경
echo $bigArray[0];               // 999, 원본 배열도 즉시 반영
// 참조 변수를 사용했으므로 불필요한 복사 없이 메모리 효율 유지

// 상황 2: 변수 이름이 명시적이지 않을 때 별명을 새로 만들고 싶을 때
$original = "Hello World";
$greeting = &$original;          // $greeting이라는 새 이름으로 별명 생성

$greeting = "Hi there!";
echo $original;                  // Hi there!, 원본 변수에도 즉시 반영
// 기존 변수의 값을 공유하면서, 개발자가 원하는 이름으로 접근 가능