⊗ppOpAdPBR 23 of 107 menu

Transmiterea obiectelor prin referință în OOP în PHP

Să presupunem că avem următoarea clasă User:

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

Să presupunem că creăm un obiect al acestei clase:

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

Imaginați-vă acum următoarea situație: doriți să atribuiți valoarea variabilei $user unei alte variabile, de exemplu $test.

Dacă nu am vorbi despre obiecte, ci despre primitive, adică șiruri de caractere, numere, matrice etc., atunci în variabila $test s-ar copia valoarea variabilei $user.

Aceasta înseamnă că modificările oricărei variabile ulterior nu ar schimba valoarea celeilalte variabile. Să vedem un exemplu:

<?php $user = 1; $test = $user; // în variabila $test acum este 1 $test = 2; // în variabila $test acum este 2, iar în $user - încă 1 ?>

Cu obiectele este diferit - atunci când sunt atribuite unei alte variabile, obiectele nu sunt copiate, ci sunt transmise prin referință: aceasta înseamnă că ambele variabile au ca valoare același obiect. Aceasta are o consecință importantă: dacă se modifică unele proprietăți ale obiectului cu ajutorul unei variabile, în a doua variabilă vor apărea aceleași modificări.

Să vedem în practică. Să creăm un obiect cu utilizatorul:

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

Să atribuim obiectul unei alte variabile:

<?php $test = $user; ?>

Să modificăm proprietatea name în variabila $test

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

Să verificăm dacă obiectul comun s-a schimbat. Să afișăm proprietatea name din variabila $user:

<?php echo $user->name; // va afișa 'eric'! ?>

Creați o clasă Product, în care vor fi următoarele proprietăți: name, price.

Creați un obiect al clasei Product, înscrieți îl în variabila $product1.

Atribuiți valoarea variabilei $product1 variabilei $product2. Verificați faptul că ambele variabile se referă la același obiect.

Română
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Folosim cookie pentru funcționarea site-ului, analiză și personalizare. Prelucrarea datelor are loc în conformitate cu Politica de confidențialitate.
acceptă toate configurează respinge