Вогуҳи объектҳо ба воситаи истинод дар ООП дар 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 таъин кунед. Санҷед, ки ҳарду тағйирёбанда ба як ва ҳамин объект истинод доранд.