Пренос објеката референцом у ООП у 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. Проверите да ли обе променљиве реферишу на исти објекат.