소개
PHP에서 객체는 기본적으로 참조로 전달됩니다. 여기서 reference는 두 개의 다른 변수가 동일한 값에 쓸 수 있도록 하는 별칭입니다. 개체 변수는 개체 자체를 값으로 포함하지 않습니다. 실제 개체를 찾을 수 있도록 허용하는 개체 식별자만 포함합니다. 객체가 인수로 보내지거나 반환되거나 할당될 때 다른 변수는 별칭이 아닙니다. 대신 동일한 객체를 가리키는 식별자의 복사본을 보유합니다.
예시
PHP에는 spl_object_hash()가 있습니다. 객체의 고유한 해시 ID를 반환하는 함수입니다. 다음 코드에서 동일한 객체를 참조하는 두 개의 객체 변수는 동일한 ID를 반환합니다.
예시
<?php class test1{ public $name; } $obj1=new test1(); echo "ID of obj1: " . spl_object_hash($obj1) . "\n"; $obj2=$obj1; echo "ID of obj2: " . spl_object_hash($obj2); ?>
출력
결과는 두 변수의 ID가 동일함을 보여줍니다.
ID of obj1: 000000004355dda6000000006f04b1a7 ID of obj2: 000000004355dda6000000006f04b1a7
개체 변수의 참조를 생성할 때 이름 앞에 &를 붙이면 속성의 모든 변경 사항이 참조 변수에 자동으로 반영됩니다.
예시
<?php class test1{ public $name; } $obj1=new test1(); echo "ID of obj1: " . spl_object_hash($obj1) . "\n"; $obj2=&$obj1; echo "ID of obj2: " . spl_object_hash($obj2) . "\n"; $obj1->name="Amar"; echo "name: " .$obj2->name; ?>
출력
위의 코드는 이제 출력 다음에 이름을 반환합니다.
ID of obj1: 00000000163cf0b8000000003ad0ed93 ID of obj2: 00000000163cf0b8000000003ad0ed93 name: Amar