АКЦЫЯ: бясплатныя месячныя курсы па стварэнні сайтаў
на выбар: вёрстка, JavaScript, PHP, Python або фрэймворкі. Сёння апошні дзень для запісу! Націскай!
⊗ppOpAdPBR 23 of 107 menu

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

byenru