Перадача аб'ектаў па спасылцы ў ААП у PHP

Хай у нас дадзены вось такі клас 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;
?>

Зменім уласцівасць name у зменнай $test

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

Давайце праверым, што змяніўся агульны аб'ект. Вывядзем уласцівасць name з зменнай $user:

index.php<?php
  echo $user->name; // вывядзе 'eric'!
?>
Задание 1

Зрабіце клас Product, у якім будуць наступныя ўласцівасці: name, price.

Задание 2

Стварыце аб'ект класа Product, запішыце яго ў зменную $product1.

Задание 3

Прысвойце значэнне зменнай $product1 у зменную $product2. Праверце тое, што абедзве зменныя спасылаюцца на адзін і той жа аб'ект.