⊗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. Проверете това, че и двете променливи сочат към един и същи обект.

Български
AfrikaansAzərbaycanবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Ние използваме бисквитки за работата на сайта, анализ и персонализация. Обработката на данни се извършва в съответствие с Политика за поверителност.
приемам всички настройки отхвърляне