Obyektlərin PHP-də OOP-də istinadla ötürülməsi

Tutaq ki, bizə User sinfi verilib:

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

Tutaq ki, biz bu sinfin obyektini yaradırıq:

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

İndi aşağıdakı vəziyyəti təsəvvür edin: siz $user dəyişəninin qiymətini başqa bir dəyişənə, məsələn, $test-ə mənimsətmək istəyirsiniz.

Əgər söhbət obyektlərdən deyil, primitivlərdən, yəni sətirlərdən, ədədlərdən, massivlərdən və s.-dən gedirsə, onda $test dəyişəninə $user dəyişəninin qiymətinin surəti düşərdi.

Bu o deməkdir ki, sonradan hər hansı bir dəyişəndə edilən dəyişikliklər digər dəyişənin qiymətini dəyişməzdi. Bir nümunəyə baxaq:

index.php<?php
  $user = 1;
  
  $test = $user; // $test dəyişənində indi 1 var
  $test = 2;     // $test dəyişənində indi 2 var, $user-də isə hələ də 1
?>

Obyektlərlə isə vəziyyət fərqlidir - başqa bir dəyişənə yazılanda obyektlər surətlənmir, əksinə istinadla ötürülür: bu o deməkdir ki, hər iki dəyişənin qiyməti eyni bir obyektdir. Bunun mühüm bir nəticəsi var: əgər obyektin hansısa xassələri bir dəyişən vasitəsilə dəyişdirilsə, ikinci dəyişəndə də eyni dəyişikliklər görünəcək.

Gəlin praktikada baxaq. İstifadəçi ilə bir obyekt yaradaq:

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

Obyekti başqa bir dəyişənə mənimsədək:

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

$test dəyişənində name xassəsini dəyişək:

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

Gəlin ümumi obyektin dəyişdiyini yoxlayaq. $user dəyişənindən name xassəsini çıxadaq:

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

Product sinfini yaradın, hansında ki, aşağıdakı xassələr olacaq: name, price.

Задание 2

Product sinfinin obyektini yaradın, onu $product1 dəyişəninə yazın.

Задание 3

$product1 dəyişəninin qiymətini $product2 dəyişəninə mənimsədin. Hər iki dəyişənin eyni bir obyektə istinad etdiyini yoxlayın.