2014-07-23 1 views
0

예를 들어 다음 클래스가 있습니다.PHP는 객체 할당을 사용할 때 항상 사본을 만들었습니까?

class A { 
    public $foo = 1; 
} 

$a = new A; 
$b = $a; // a copy of the same identifier (NB) 

은 식별자의 사본이 만들어지는 current PHP docs에 따르면, 이것은 항상 그런 되었는가? 그렇지 않은 경우 언제 변경 되었습니까?

+2

이는 사본이라고하지는 않습니다. 그것은 완전히 다른 것을 말합니다. –

답변

7

항상 그런 것은 아닙니다. PHP4에서 새로운 변수에 할당되면 객체가 복사되었습니다. PHP5가 소개되었을 때, 이것은 할당 된 객체의 참조를 전달하기 위해 변경되었습니다.

(From the manual)

는 PHP 5에서 새로운 객체 모델이있다. PHP의 객체 처리가 완전히 재 작성되어 성능과 기능이 향상되었습니다. 이전 버전의 PHP에서는 객체가 원시 유형 (예 : 정수 및 문자열)처럼 처리되었습니다. 이 방법의 단점은 의미 적으로 변수가 할당 될 때 전체 객체가 복사되거나 메소드에 매개 변수로 전달된다는 것입니다. 새로운 접근법에서 객체는 값이 아닌 핸들에 의해 참조됩니다 (핸들을 객체의 식별자로 생각할 수 있음).

+0

명확히하기 위해 PHP 5의 복사본은 개체 자체의 복사본이 아니라 식별자 **의 복사본입니다. John이 설명하는 것은 정확하며 문서에 동의합니다. – Brad

+2

더 많은 인간 언어에서, $ b는 $ a에 대한 별명입니다. – DarkBee

+1

Linux 언어에서 $ b는 $ a에 대한 심볼릭 링크입니다. Windows 언어에서 $ b는 $ a의 바로 가기입니다. 비유로 나를 죽이지 마라. :) –

관련 문제