Forum und email

참조는 무엇을 하는가

PHP 참조는 두 변수가 같은 내용을 참조할수 있게 한다. 다음과 같은 일을 한다:

<?php
$a 
=& $b 
?>
$a$b는 같은 변수를 가리킨다는 것을 의미이다.

Note: 여기서 $a$b는 완전히 같다. $a$b를 가리키고, 그 반대일수도 있다. $a$b는 같은 곳을 가리키고 있다.

같은 문법은 함수에도 적용된다. 참조를 돌려받고, new연산자와도 함께 쓸수 있다 (PHP 4.0.4 이후 버전부터 유효):

<?php
$bar 
=& new fooclass();
$foo =& find_var ($bar);
?>

Note: & 연산자를 사용하지않으면 생성된 객체의 복사본을 돌려받는다. 그 클래스에서 $this를 사용한다면 그것은 클래스의 현재 인스턴스에만 영향을 미친다. &가 없는 지정은 인스턴스(즉, 객체)를 복사할것이고 $this는 복사본에만 영향을 미칠것이다. 이와 같은 것은 퍼포먼스와 메모리의 효율적인 사용을 위해 오직 하나의 인스턴스만 취급하기를 원할 경우에 사용된다.
@new처럼 생성자에서 발생하는 모든 에러 메시지를 보이지 않게 하기 위해서 @연산자를 사용할수 있지만, &new구문을 사용할때는 이 연산자는 작동하지 않는다. 이것은 젠드 엔진(Zend Engine)의 한계이고 이런 표현을 쓰면 파싱 에러가 발생한다.

참조가 하는 두번째 일은 참조에 의해 변수를 전달하는 것이다. 이와 같은 것은 함수에서 지역 변수를 만들거나 같은 내용을 참조하는 호출을 사용하는 변수를 생성함으로써 가능해진다. 예를 들면:

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

$a=5;
foo ($a);
?>
위 코드는 $a를 6으로 만들것이다. 이렇게 되는 이유는 foo함수 안의 변수 $var$a와 같은 내용을 가리키기 때문이다. 더 자세한 설명을 참조에 의한 전달 섹션에서 볼수 있다.

참조가 하는 세번째 일은 참조에 의해 돌려받기이다.