⊗ppOpAdPBR 23 of 107 menu

Olioiden viittauksella välittäminen OOP:ssa PHP:ssä

Oletetaan, että meillä on seuraava luokka User:

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

Oletetaan, että luomme tämän luokan olion:

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

Kuvittele nyt seuraava tilanne: haluat muuttujan $user arvon sijoittaa jollekin toiselle muuttujalle, esimerkiksi $test.

Jos kyse ei olisi olioista, vaan primaattityypeistä, eli esimerkiksi merkkijonoista, luvuista, taulukoista jne., muuttujaan $test menisi kopio muuttujan $user arvosta.

Tämä tarkoittaa, että minkä tahansa muuttujan muuttaminen myöhemmin ei muuttaisi toisen muuttujan arvoa. Katsotaanpa esimerkkiä:

<?php $user = 1; $test = $user; // muuttujassa $test on nyt 1 $test = 2; // muuttujassa $test on nyt 2, mutta $user:ssa edelleen 1 ?>

Olioiden kanssa asiat ovat toisin - kun sijoitetaan toiseen muuttujaan, olioita ei kopioida, vaan ne siirretään viittauksella: tämä tarkoittaa, että molemmilla näillä muuttujilla on arvonaan yksi ja sama olio. Tällä on tärkeä seuraus: jos muutetaan joitain olion ominaisuuksia yhden muuttujan kautta, toisessa muuttujassa näkyvät samat muutokset.

Katsotaanpa käytännössä. Luodaan olio käyttäjästä:

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

Sijoitetaan olio toiseen muuttujaan:

<?php $test = $user; ?>

Muutetaan ominaisuutta name muuttujassa $test

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

Tarkistetaan, että yhteinen olio on muuttunut. Tulostetaan ominaisuus name muuttujasta $user:

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

Tee luokka Product, jossa on seuraavat ominaisuudet: name, price.

Luo luokan Product olio, tallenna se muuttujaan $product1.

Sijoita muuttujan $product1 arvo muuttujaan $product2. Tarkista, että molemmat muuttujat viittaavat yhteen ja samaan olioon.

Suomi
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Käytämme evästeitä verkkosivuston toiminnalle, analytiikalle ja personoinnille. Tietojen käsittely tapahtuu Tietosuojakäytännön mukaisesti.
hyväksy kaikki mukauta hylkää