Uhamishaji wa Vitu kwa Kumbukumbu katika OOP katika PHP

Hebu tuchukue kuwa tuna darasa User kama ifuatavyo:

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

Hebu tuunde kitu cha darasa hili:

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

Sasa fikiria hali ifuatayo: unataka thamani ya mabadiliko $user kuipeana kwa mabadiliko mengine, kwa mfano $test.

Kama lingekuwa si suala la vitu, bali la primitive, yaani masharti, nambari, arrays na kadhalika, basi kwenye mabadiliko $test ingeingia nakala ya thamani ya mabadiliko $user.

Hii inamaanisha kuwa mabadiliko ya yoyote kati ya mabadiliko baadaye hayingebadilisha thamani ya mabadiliko mengine mabadiliko. Hebu tuangalie kwa mfano:

index.php<?php
  $user = 1;
  
  $test = $user; // kwenye mabadiliko $test sasa kuna 1
  $test = 2;     // kwenye mabadiliko $test sasa kuna 2, lakini kwenye $user - bado 1
?>

Kwa vitu ni tofauti - wakati wa kurekebisha kwenye mabadiliko mengine vitu hazinakiliwi, bali huhamishwa kwa kumbukumbu: hii inamaanisha, kuwa mabadiliko yote mawili yenye thamani huwa na kitu kimoja tu. Hii ina athari muhimu: kama kubadilisha sifa zozote za kitu na kutumia mabadiliko moja, kwenye mabadiliko ya pili mabadiliko haya yataonekana.

Hebu tuangalie kwa vitendo. Tuunde kitu cha mtumiaji:

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

Tuipeane kitu kwa mabadiliko mengine:

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

Hebu tubadilishe sifa name kwenye mabadiliko $test

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

Hebu tuangalie, kama kitu kilichobadilika kwa pamoja. Tuonyeshe sifa name kutoka kwenye mabadiliko $user:

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

Tengeneza darasa Product, ambamo itakuwa na sifa zifuatazo: name, price.

Задание 2

Unda kitu cha darasa Product, andika kwenye mabadiliko $product1.

Задание 3

Ipe thamani ya mabadiliko $product1 kwa mabadiliko $product2. Angalia kuwa mabadiliko yote yanarejelea kitu kimoja tu.