PHP 5 OOP에서 자주 언급되는 키포인트중에 하나가 바로 "객체는 기본적으로 passed by reference 이다" 입니다. 이것은 옳은 말은 아닙니다. 이 섹션에서는 몇가지 예제를 통해 그것을 바로잡을 것입니다.
PHP의 참조는 별칭입니다. 이는 서로 다른 변수가 같은 값을 사용할 수 있게 합니다. PHP 5 이후에는 객체자체를 변수에 지니지 않습니다. 변수는 그저 객체 식별자를 가지게 되어, 식별자는 진짜 객체를 찾기 위한 용도로 사용됩니다. 객체가 인자로 넘어갈때, 다른변수에 반환 또는 할당될때, 이 변수들은 별칭이 아닙니다.: 식별자의 복사하여 가지게 되며, 이 식별자들은 같은 객체를 가리킵니다.
Example #1 References and Objects
<?php
class A {
public $foo = 1;
}
$a = new A;
$b = $a; // $a 와 $b 는 같은 식별자를 가집니다.
// ($a) = ($b) = <id>
$b->foo = 2;
echo $a->foo."\n";
$c = new A;
$d = &$c; // $c 와 $d 는 참조이다
// ($c,$d) = <id>
$d->foo = 2;
echo $c->foo."\n";
$e = new A;
function foo($obj) {
// ($obj) = ($e) = <id>
$obj->foo = 2;
}
foo($e);
echo $e->foo."\n";
?>
위 예제의 출력:
2 2 2