Пренос објеката референцом у ООП у PHP
Претпоставимо да имамо следећу класу User:
<?php
class User
{
public $name;
public $age;
public function __construct($name, $age)
{
$this->name = $name;
$this->age = $age;
}
}
?>
Претпоставимо да креирамо објекат ове класе:
<?php
$user = new User('john', 30);
?>
Замислите сада следећу ситуацију: желите
вредност променљиве $user доделити
некој другој променљивој, на пример
$test.
Ако се није радило о објектима, већ о примитивима,
односно о стринговима, бројевима, низовима и сл.,
тада би у променљиву $test отишла копија
вредности променљиве $user.
То значи да промене било које променљиве у даљем току не би мењале вредност друге променљиве. Погледајмо на примеру:
<?php
$user = 1;
$test = $user; // у променљивој $test сада имамо 1
$test = 2; // у променљивој $test сада имамо 2, а у $user - и даље 1
?>
Са објектима је другачије - при упису у другу променљиву објекти се не копирају, већ се преносе референцом: то значи, да обе те променљиве као вредност имају исти објекат. Ово има важну последицу: ако промените нека својства објекта помоћу једне променљиве, у другој променљивој ће се појавити исте промене.
Да видимо на пракси. Креирајмо објекат са корисником:
<?php
$user = new User('john', 30);
?>
Доделимо објекат другој променљивој:
<?php
$test = $user;
?>
Променимо својство name
у променљивој $test
<?php
$test->name = 'eric';
?>
Да проверимо да ли се променио заједнички објекат.
Испишимо својство name
из променљиве $user:
<?php
echo $user->name; // исписаће 'eric'!
?>
Направите класу Product, у којој
ће бити следећа својства: name,
price.
Креирајте објекат класе Product, уписати
га у променљиву $product1.
Доделите вредност променљиве $product1
променљивој $product2. Проверите
да ли обе променљиве реферишу на исти
објекат.