PHP OOP에서 객체 참조 전달

다음과 같은 User 클래스가 있다고 가정해 봅시다:

User.php<?php
  class User
  {
    public $name;
    public $age;
    
    public function __construct($name, $age)
    {
      $this->name = $name;
      $this->age  = $age;
    }
  }
?>

이 클래스의 객체를 생성합니다:

index.php<?php
  $user = new User('john', 30);
?>

이제 다음과 같은 상황을 상상해 보세요: $user 변수의 값을 다른 변수, 예를 들어 $test에 할당하려고 합니다.

객체가 아닌 원시 타입, 즉 문자열, 숫자, 배열 등에 대해 이야기했다면, $test 변수에는 $user 변수 값의 사본이 들어갔을 것입니다.

이것은 나중에 어떤 변수를 변경하더라도 다른 변수의 값이 변경되지 않음을 의미합니다. 다음 예시를 살펴보겠습니다:

index.php<?php
  $user = 1;
  
  $test = $user; // $test 변수에는 이제 1이 들어 있습니다
  $test = 2;     // $test 변수에는 이제 2가, $user에는 여전히 1이 들어 있습니다
?>

객체의 경우는 다릅니다 - 다른 변수에 할당할 때 객체는 복사되지 않고 참조로 전달됩니다: 이는 이 두 변수 모두 값으로 동일한 객체를 가짐을 의미합니다. 이는 중요한 결과를 가집니다: 하나의 변수를 사용하여 객체의 일부 속성을 변경하면 두 번째 변수에서도 동일한 변경 사항이 나타납니다.

실제로 확인해 보겠습니다. 사용자 객체를 생성합니다:

index.php<?php
  $user = new User('john', 30);
?>

객체를 다른 변수에 할당합니다:

index.php<?php
  $test = $user;
?>

$test 변수에서 name 속성을 변경합니다.

index.php<?php
  $test->name = 'eric';
?>

공유된 객체가 변경되었는지 확인해 보겠습니다. $user 변수에서 name 속성을 출력합니다:

index.php<?php
  echo $user->name; // 'eric'을 출력합니다!
?>
Задание 1

다음 속성을 가지는 Product 클래스를 만드세요: name, price.

Задание 2

Product 클래스의 객체를 생성하고, $product1 변수에 저장하세요.

Задание 3

$product1 변수의 값을 $product2 변수에 할당하세요. 두 변수가 동일한 객체를 참조하는지 확인하세요.