PHP OOP에서 객체 참조 전달
다음과 같은 User 클래스가 있다고 가정해 봅시다:
<?php
class User
{
public $name;
public $age;
public function __construct($name, $age)
{
$this->name = $name;
$this->age = $age;
}
}
?>
이 클래스의 객체를 생성합니다:
<?php
$user = new User('john', 30);
?>
이제 다음과 같은 상황을 상상해 보세요:
$user 변수의 값을 다른 변수, 예를 들어
$test에 할당하려고 합니다.
객체가 아닌 원시 타입,
즉 문자열, 숫자, 배열 등에 대해 이야기했다면,
$test 변수에는 $user 변수 값의 사본이
들어갔을 것입니다.
이것은 나중에 어떤 변수를 변경하더라도 다른 변수의 값이 변경되지 않음을 의미합니다. 다음 예시를 살펴보겠습니다:
<?php
$user = 1;
$test = $user; // $test 변수에는 이제 1이 들어 있습니다
$test = 2; // $test 변수에는 이제 2가, $user에는 여전히 1이 들어 있습니다
?>
객체의 경우는 다릅니다 - 다른 변수에 할당할 때 객체는 복사되지 않고 참조로 전달됩니다: 이는 이 두 변수 모두 값으로 동일한 객체를 가짐을 의미합니다. 이는 중요한 결과를 가집니다: 하나의 변수를 사용하여 객체의 일부 속성을 변경하면 두 번째 변수에서도 동일한 변경 사항이 나타납니다.
실제로 확인해 보겠습니다. 사용자 객체를 생성합니다:
<?php
$user = new User('john', 30);
?>
객체를 다른 변수에 할당합니다:
<?php
$test = $user;
?>
$test 변수에서 name
속성을 변경합니다.
<?php
$test->name = 'eric';
?>
공유된 객체가 변경되었는지 확인해 보겠습니다.
$user 변수에서 name
속성을 출력합니다:
<?php
echo $user->name; // 'eric'을 출력합니다!
?>
다음 속성을 가지는 Product 클래스를 만드세요: name,
price.
Product 클래스의 객체를 생성하고,
$product1 변수에 저장하세요.
$product1 변수의 값을
$product2 변수에 할당하세요. 두 변수가
동일한 객체를 참조하는지 확인하세요.