⊗ppOpMgROP 89 of 107 menu

Vlastnosti len na čítanie v OOP v PHP

Pozrime sa na triedu, v ktorej sú všetky vlastnosti súkromné:

<?php class Test { private $prop1 = 1; private $prop2 = 2; } ?>

Teraz urobme tak, aby tieto vlastnosti boli v externe dostupné len na čítanie. Podobné sme už robili, keď sme vytvárali gettre pre každú vlastnosť a nevytvárali settre.

Poďme teraz na vyriešenie tejto úlohy použiť magickú metódu __get. Budeme v nej vracať hodnotu požadovanej vlastnosti. Ako to urobiť: názov požadovanej vlastnosti sa dostane do parametra metódy __get, v našom prípade $property.

To znamená, že môžeme prečítať vlastnosť, ktorej názov je uložený v premennej, takto: $this->$property (názov vlastnosti bude premenná, teda s dolárom na začiatku, to sme preberali v predchádzajúcich lekciách).

Urobme opísanú metódu __get:

<?php class Test { private $prop1 = 1; private $prop2 = 2; public function __get($property) { return $this->$property; } } ?>

Využime ju na čítanie vlastností:

<?php $test = new Test; echo $test->prop1; // vypíše 1 echo $test->prop2; // vypíše 2 ?>

Pokus o zápis čohokoľvek do vlastnosti povedie k chybe:

<?php $test = new Test; $test->prop1 = 2; // vyvolá chybu ?>

Je to presne to, čo potrebujeme: vlastnosť možno prečítať, ale nie zapisovať.

Pokus o prečítanie neexistujúcej vlastnosti vyvolá chybu:

<?php $test = new Test; echo $test->prop3; // vyvolá chybu ?>

Všimnite si tiež nasledujúcu nuansu: keď sme robili vlastnosti len na čítanie starým spôsobom, tak na to, aby sme prečítali vlastnosť, sme používali metódu-getter.

V novom spôsob budeme pristupovať priamo k vlastnostiam, akoby boli verejné. Ale zapísať do nich nebudeme môcť, akoby boli súkromné.

Nech je daná takáto trieda User, ktorej vlastnosti sú dostupné len na čítanie pomocou getterov:

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

Upravte kód tejto triedy tak, aby namiesto getterov bol použitý magický metód __get.

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
Používame cookies na fungovanie stránky, analýzu a personalizáciu. Spracúvanie údajov prebieha v súlade s Politikou ochrany osobných údajov.
prijať všetky nastaviť odmietnuť