Uhamishaji wa Vitu kwa Kumbukumbu katika OOP katika PHP
Hebu tuchukue kuwa tuna darasa User kama ifuatavyo:
<?php
class User
{
public $name;
public $age;
public function __construct($name, $age)
{
$this->name = $name;
$this->age = $age;
}
}
?>
Hebu tuunde kitu cha darasa hili:
<?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:
<?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:
<?php
$user = new User('john', 30);
?>
Tuipeane kitu kwa mabadiliko mengine:
<?php
$test = $user;
?>
Hebu tubadilishe sifa name
kwenye mabadiliko $test
<?php
$test->name = 'eric';
?>
Hebu tuangalie, kama kitu kilichobadilika kwa pamoja.
Tuonyeshe sifa name
kutoka kwenye mabadiliko $user:
<?php
echo $user->name; // itaonyesha 'eric'!
?>
Tengeneza darasa Product, ambamo
itakuwa na sifa zifuatazo: name,
price.
Unda kitu cha darasa Product, andika
kwenye mabadiliko $product1.
Ipe thamani ya mabadiliko $product1
kwa mabadiliko $product2. Angalia
kuwa mabadiliko yote yanarejelea kitu
kimoja tu.