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