Вогуҳи объектҳо ба воситаи истинод дар ООП дар 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 таъин кунед. Санҷед,
ки ҳарду тағйирёбанда ба як
ва ҳамин объект истинод доранд.