참조로 전달

참조로 전달

이 페이지에서는 함수에 변수를 참조로 전달하는 방법을 다룹니다. 참조로 전달하면 함수가 호출한 쪽의 변수를 직접 수정할 수 있고, 어떤 것들을 참조로 전달할 수 있는지도 함께 살펴봐요.

출처: Passing by Reference

본문

변수를 참조로 함수에 전달하면, 그 함수가 변수를 수정할 수 있게 됩니다. 문법은 다음과 같아요.

<?php
function foo(&$var)
{
    $var++;
}

$a = 5;
foo($a);
print $a; // $a is 6 here

참조로 전달할 수 있는 것들은 다음과 같습니다.

  • 변수, 즉 foo($a)

  • 함수에서 반환된 참조. 예를 들면 다음과 같아요.

    <?php function foo (& $var )
    { $var ++;
        print $var ;
    }
    
    function & bar ()
    { $a = 5 ;
        return $a ;
    } foo ( bar ()); 
    

    참조로 반환하는 것에 대한 자세한 내용은 참조 반환을 참고하세요.

그 외의 표현은 참조로 전달하면 안 돼요. 결과가 정의되지 않기 때문이죠. 예를 들어 다음의 참조 전달 예시는 전부 잘못된 경우입니다.

<?php

function foo(&$var)
{
    $var++;
}

function bar() // Note the missing &
{
    $a = 5;
    return $a;
}

foo(bar()); // Produces a notice

foo($a = 5); // Expression, not variable
foo(5); // Produces fatal error

class Foobar {}

foo(new Foobar()) // Produces a notice as of PHP 7.0.7
                  // Notice: Only variables should be passed by reference

더 알아보기