ობიექტების გადაცემა მითითებით OOP-ში 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 ცვლადს. შეამოწმეთ რომ ორივე ცვლადი მიუთითებს ერთ და იმავე ობიექტზე.