PHP da OOP da obyektlarni havola orqali uzatish

Faraz qilaylik, bizda quyidagi User klassi mavjud:

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

Faraz qilaylik, biz ushbu klassning obyektini yaratamiz:

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

Endi quyidagi vaziyatni tasavvur qiling: siz $user o'zgaruvchisining qiymatini boshqa bir o'zgaruvchiga, masalan $test ga tayinlamoqchisiz.

Agar gap obyektlar haqida emas, balki primitivlar haqida bo'lsa, ya'ni satrlar, raqamlar, massivlar va h.k. bo'lsa, $test o'zgaruvchisiga $user o'zgaruvchisining qiymati nusxasi o'tadi.

Bu shuni anglatadiki, keyinchalik har qanday o'zgaruvchining o'zgartirilishi boshqa o'zgaruvchining qiymatini o'zgartirmaydi. Keling, misolni ko'rib chiqaylik:

index.php<?php
  $user = 1;
  
  $test = $user; // $test o'zgaruvchida endi 1
  $test = 2;     // $test o'zgaruvchida endi 2, $user da esa hali ham 1
?>

Obyektlar bilan hamma narsa boshqacha - ular boshqa o'zgaruvchiga yozilganda nusxalanmaydi, balki havola orqali uzatiladi: bu shuni anglatadiki, bu ikkala o'zgaruvchining qiymati bir xil obyektga ega. Buning muhim oqibati bor: agar obyektning ba'zi xususiyatlarini bitta o'zgaruvchi yordamida o'zgartirsangiz, ikkinchi o'zgaruvchida ham xuddi shu o'zgarishlar paydo bo'ladi.

Keling, amalda ko'rib chiqaylik. Foydalanuvchi bilan obyekt yaratamiz:

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

Obyektni boshqa o'zgaruvchiga tayinlaymiz:

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

name xususiyatini $test o'zgaruvchida o'zgartiramiz

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

Keling, umumiy obyekt o'zgarganligini tekshiramiz. name xususiyatini $user o'zgaruvchidan chiqaramiz:

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

Product klassini yarating, unda quyidagi xususiyatlar bo'lsin: name, price.

Задание 2

Product klassining obyektini yarating, uni $product1 o'zgaruvchisiga yozing.

Задание 3

$product1 o'zgaruvchisining qiymatini $product2 o'zgaruvchisiga tayinlang. Ikkala o'zgaruvchi ham bir xil obyektga ishora qilishini tekshiring.