⊗ppOpAdPBR 23 of 107 menu

Przekazywanie obiektów przez referencję w OOP w PHP

Załóżmy, że mamy taką klasę User:

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

Załóżmy, że tworzymy obiekt tej klasy:

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

Wyobraźmy sobie teraz następującą sytuację: chcemy przypisać wartość zmiennej $user do innej zmiennej, na przykład $test.

Gdyby nie chodziło o obiekty, a o prymitywy, czyli o ciągi znaków, liczby, tablice itp., to do zmiennej $test trafiłaby kopia wartości zmiennej $user.

Oznacza to, że zmiany którejkolwiek ze zmiennych w przyszłości nie zmieniałyby wartości drugiej zmiennej. Spójrzmy na przykład:

<?php $user = 1; $test = $user; // w zmiennej $test jest teraz 1 $test = 2; // w zmiennej $test jest teraz 2, a w $user - nadal 1 ?>

Z obiektami jest inaczej - podczas zapisywania do innej zmiennej obiekty nie są kopiowane, a przekazywane przez referencję: oznacza to, że obie te zmienne mają jako wartość jeden i ten sam obiekt. Ma to ważną konsekwencję: jeśli zmienimy jakieś właściwości obiektu za pomocą jednej zmiennej, w drugiej zmiennej pojawią się te same zmiany.

Sprawdźmy to w praktyce. Stwórzmy obiekt z użytkownikiem:

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

Przypiszmy obiekt do innej zmiennej:

<?php $test = $user; ?>

Zmieńmy właściwość name w zmiennej $test

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

Sprawdźmy, czy zmienił się wspólny obiekt. Wypiszmy właściwość name ze zmiennej $user:

<?php echo $user->name; // wypisze 'eric'! ?>

Stwórz klasę Product, w której będą następujące właściwości: name, price.

Utwórz obiekt klasy Product, zapisz go w zmiennej $product1.

Przypisz wartość zmiennej $product1 do zmiennej $product2. Sprawdź, czy obie zmienne odwołują się do jednego i tego samego obiektu.

Polski
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Wykorzystujemy pliki cookie do działania strony, analizy i personalizacji. Przetwarzanie danych odbywa się zgodnie z Polityką prywatności.
zaakceptuj wszystkie dostosuj odrzuć