⊗ppOpAdPBR 23 of 107 menu

Předávání objektů odkazem v OOP v PHP

Předpokládejme, že máme danou tuto třídu User:

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

Předpokládejme, že vytváříme objekt této třídy:

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

Nyní si představte následující situaci: chcete hodnotu proměnné $user přiřadit nějaké jiné proměnné, například $test.

Pokud by se nejednalo o objekty, ale o primitivní typy, tj. o řetězce, čísla, pole atd., do proměnné $test by se dostala kopie hodnoty proměnné $user.

To znamená, že změny kterékoliv z proměnných dále by neměnily hodnotu druhé proměnné. Podívejme se na příklad:

<?php $user = 1; $test = $user; // v proměnné $test je nyní 1 $test = 2; // v proměnné $test je nyní 2, ale v $user - stále 1 ?>

S objekty je to jinak - při zápisu do jiné proměnné se objekty nekopírují, ale předávají odkazem: to znamená, že obě tyto proměnné mají za hodnotu jeden a tentýž objekt. To má důležitý důsledek: pokud změníme nějaké vlastnosti objektu pomocí jedné proměnné, ve druhé proměnné se objeví tytéž změny.

Podívejme se na to v praxi. Vytvořme objekt s uživatelem:

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

Přiřaďme objekt do jiné proměnné:

<?php $test = $user; ?>

Změňme vlastnost name v proměnné $test

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

Ověřme, že se změnil společný objekt. Vypišme vlastnost name z proměnné $user:

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

Vytvořte třídu Product, ve které budou následující vlastnosti: name, price.

Vytvořte objekt třídy Product, zapište ho do proměnné $product1.

Přiřaďte hodnotu proměnné $product1 do proměnné $product2. Ověřte, že obě proměnné odkazují na jeden a tentýž objekt.

Čeština
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяDanskDeutschΕλληνικά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
Používáme soubory cookie pro fungování webu, analýzu a personalizaci. Zpracování údajů probíhá v souladu s Zásadami ochrany osobních údajů.
přijmout vše přizpůsobit odmítnout