Перадача аб'ектаў па спасылцы ў ААП у 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. Праверце
тое, што абедзве зменныя спасылаюцца на адзін
і той жа аб'ект.