Preklad objektov odkazom v OOP v PHP
Nech je nám daná takáto trieda User:
<?php
class User
{
public $name;
public $age;
public function __construct($name, $age)
{
$this->name = $name;
$this->age = $age;
}
}
?>
Nech vytvárame objekt tejto triedy:
<?php
$user = new User('john', 30);
?>
Predstavte si teraz nasledujúcu situáciu: vy
chcete hodnotu premennej $user priradiť
nejakej inej premennej, napríklad
$test.
Ak by sa nejednalo o objekty, ale o primitívne typy,
teda o reťazce, čísla, polia atď.,
potom by do premennej $test prišla kópia
hodnoty premennej $user.
To znamená, že zmeny akejkoľvek premennej by v budúcnosti nemenili hodnotu druhej premennej. Pozrime sa na príklad:
<?php
$user = 1;
$test = $user; // v premennej $test je teraz 1
$test = 2; // v premennej $test je teraz 2, ale v $user - stále 1
?>
S objektami je to inak - pri zápise do iných premenných sa objekty nekopírujú, ale prenášajú sa odkazom: to znamená, že obe tieto premenné majú hodnotou jeden a ten istý objekt. Má to dôležitý dôsledok: ak sa zmenia nejaké vlastnosti objektu pomocou jednej premennej, v druhej premennej sa objavia tie isté zmeny.
Pozrime sa na to v praxi. Vytvorme objekt s používateľom:
<?php
$user = new User('john', 30);
?>
Priraďme objekt do inej premennej:
<?php
$test = $user;
?>
Zmeňme vlastnosť name
v premennej $test
<?php
$test->name = 'eric';
?>
Skontrolujme, či sa zmenil spoločný objekt.
Vypíšme vlastnosť name
z premennej $user:
<?php
echo $user->name; // vypíše 'eric'!
?>
Vytvorte triedu Product, v ktorej
budú nasledujúce vlastnosti: name,
price.
Vytvorte objekt triedy Product, zapíšte
ho do premennej $product1.
Priraďte hodnotu premennej $product1
do premennej $product2. Skontrolujte,
že obe premenné odkazujú na jeden
a ten istý objekt.