Пренос на објекти по референца во ООП во 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. Проверете
тоа дека и двете променливи референцираат на еден
ист објект.