Objektų perdavimas nuoroda OOP PHP
Tarkime, kad turime šią User klasę:
<?php
class User
{
public $name;
public $age;
public function __construct($name, $age)
{
$this->name = $name;
$this->age = $age;
}
}
?>
Tarkime, sukuriame šios klasės objektą:
<?php
$user = new User('john', 30);
?>
Dabar įsivaizduokite tokią situaciją: norite
priskirti kintamojo $user reikšmę
kitam kintamajam, pavyzdžiui
$test.
Jei kalbėtume ne apie objektus, o apie primitivus,
tai yra apie eilutes, skaičius, masyvus ir pan.,
tada į kintamąjį $test patektų
kintamojo $user reikšmės kopija.
Tai reiškia, kad vėlesni bet kurio kintamojo pakeitimai nekeistų kito kintamojo reikšmės. Pažiūrėkime pavyzdį:
<?php
$user = 1;
$test = $user; // kintamajame $test dabar yra 1
$test = 2; // kintamajame $test dabar yra 2, o $user - vis tiek 1
?>
Su objektais viskas kitaip - priskiriant kitam kintamajam objektai nekopijuojami, o perduodami nuoroda: tai reiškia, kad abu šie kintamieji turi tą patį objektą kaip reikšmę. Tai turi svarbią pasekmę: jei keičiamos kokios nors objekto savybės naudojant vieną kintamąjį, antrajame kintamajame atsiras tie patys pakeitimai.
Pažiūrėkime praktiškai. Sukurkime vartotojo objektą:
<?php
$user = new User('john', 30);
?>
Priskirkime objektą kitam kintamajam:
<?php
$test = $user;
?>
Pakeiskime savybę name
kintamajame $test
<?php
$test->name = 'eric';
?>
Patikrinkime, ar pasikeitė bendras objektas.
Išveskime savybę name
iš kintamojo $user:
<?php
echo $user->name; // išves 'eric'!
?>
Sukurkite klasę Product, kurioje
bus šios savybės: name,
price.
Sukurkite Product klasės objektą, įrašykite
jį į kintamąjį $product1.
Priskirkite kintamojo $product1 reikšmę
kintamajam $product2. Patikrinkite,
kad abu kintamieji nurodo tą patį
objektą.