Computer >> 컴퓨터 >  >> 프로그래밍 >> PHP

PHP 5에서 객체를 참조로 전달하는 방법 완벽 정리

PHP에서 참조(reference)는 일종의 별칭(alias)으로, 서로 다른 두 변수가 동일한 값에 접근하고 수정할 수 있도록 해주는 메커니즘입니다. 하지만 PHP 5에서 객체를 다룰 때는 조금 다른 방식으로 작동합니다.

PHP 5의 객체 변수 구조

PHP 5에서 객체 변수는 객체 자체를 값으로 직접 담고 있지 않습니다. 대신 객체 식별자(object identifier)를 저장하며, 이 식별자를 통해 객체 접근자(object accessor)가 실제 객체를 찾아갈 수 있습니다.

따라서 객체가 함수의 인수로 전달되거나, 반환되거나, 다른 변수에 할당될 때 해당 변수들은 원래 변수의 별칭(alias)이 아닙니다. 이 변수들은 동일한 객체를 가리키는 식별자의 복사본을 담고 있을 뿐입니다. 즉, 여러 변수가 하나의 객체 인스턴스를 공유하는 형태가 됩니다.

코드 예제

다음 예제를 통해 객체가 어떻게 처리되는지 확인해 보겠습니다.

$my_var = new class_name;
echo $my_var->get_class_name(5)->value;
$my_var->test();
echo $my_var->get_class_name(5)->value;

실행 결과

위 코드를 실행하면 다음과 같은 출력 결과를 얻을 수 있습니다.

class_name #5

참조 전달 vs 참조 할당

여기서 중요한 점은 위의 동작이 엄밀히 말해 "참조에 의한 전달(pass by reference)"이 아니라는 것입니다. 실제로는 "참조에 의한 할당(assignment by reference)"에 가깝습니다.

PHP 5에서는 객체를 다룰 때 참조 방식의 할당이 기본 동작(default behavior)으로 설정되어 있습니다. 따라서 개발자가 명시적으로 & 연산자를 사용하지 않더라도, 객체를 다른 변수에 대입하면 두 변수는 자동으로 같은 객체 인스턴스를 가리키게 됩니다.

이러한 특성 덕분에 PHP 5에서는 객체를 복사 없이 효율적으로 전달할 수 있으며, 의도적으로 완전한 복사본이 필요한 경우에는 clone 키워드를 사용해야 합니다.