⊗ppOpAdPBR 23 of 107 menu

Posredovanje objektov po referenci v OOP v PHP

Recimo, da imamo podan razred User:

<?php class User { public $name; public $age; public function __construct($name, $age) { $this->name = $name; $this->age = $age; } } ?>

Recimo, da ustvarimo objekt tega razreda:

<?php $user = new User('john', 30); ?>

Zdaj pa si predstavljajte naslednjo situacijo: želite vrednost spremenljivke $user prirediti kakšni drugi spremenljivki, na primer $test.

Če ne bi šlo za objekte, ampak za primitivne tipe, to je nize, števila, tabele itd., bi v spremenljivko $test šla kopija vrednosti spremenljivke $user.

To pomeni, da spremembe katere koli spremenljivke v nadaljevanju ne bi spremenile vrednosti druge spremenljivke. Poglejmo si primer:

<?php $user = 1; $test = $user; // v spremenljivki $test je zdaj 1 $test = 2; // v spremenljivki $test je zdaj 2, v $user pa še vedno 1 ?>

Z objekti je drugače - pri zapisovanju v drugo spremenljivko se objekti ne kopirajo, ampak se posredujejo po referenci: to pomeni, da imata obe spremenljivki za vrednost isti objekt. To ima pomembno posledico: če spremenimo kakšne lastnosti objeka s pomočjo ene spremenljivke, se bodo v drugi spremenljivki pojavile te iste spremembe.

Poglejmo si to v praksi. Ustvarimo objekt z uporabnikom:

<?php $user = new User('john', 30); ?>

Priredimo objekt drugi spremenljivki:

<?php $test = $user; ?>

Spremenimo lastnost name v spremenljivki $test

<?php $test->name = 'eric'; ?>

Preverimo, ali se je spremenil skupni objekt. Izpišimo lastnost name iz spremenljivke $user:

<?php echo $user->name; // izpiše 'eric'! ?>

Naredite razred Product, v katerem so naslednje lastnosti: name, price.

Ustvarite objekt razreda Product, zapišite ga v spremenljivko $product1.

Priredite vrednost spremenljivke $product1 spremenljivki $product2. Preverite, da se obe spremenljivki sklicujeta na isti objekt.

Slovenščina
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Za delovanje spletnega mesta, analitiko in personalizacijo uporabljamo piškotke. Obdelava podatkov poteka v skladu s Politiko zasebnosti.
sprejmi vse nastavi zavrni