php5의 객체 프로그래밍에서 자주 언급되는 핵심은 "객체는 기본적으로 참조로 전달된다"는 것입니다. 그러나 실제로 이것은 완전히 정확하지 않습니다. 다음은 설명할 몇 가지 예입니다.
PHP의 참조는 별칭입니다. 즉, 두 개의 서로 다른 변수 이름이 동일한 내용을 가리킵니다. PHP5에서는 객체 변수가 더 이상 전체 객체의 값을 보유하지 않습니다. 실제 개체 콘텐츠에 액세스하려면 식별자를 저장하기만 하면 됩니다. 객체가 매개변수로 전달되거나 결과로 반환되거나 다른 변수에 할당되면 다른 변수는 원래 변수와 참조 관계가 없지만 둘 다 동일한 식별자의 복사본을 저장합니다. 같은 개체.
예제 #1 참조 및 개체
<?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