⊗ppOpMgROP 89 of 107 menu

Lastnosti samo za branje v OOP v PHP

Oglejmo si razred, v katerem so vse lastnosti zasebne:

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

Zdaj naredimo tako, da so te lastnosti v zunanjem svetu dostopne samo za branje. To smo že naredili prej, ko smo ustvarili getterje za vsako lastnost in nismo ustvarili setterjev.

Zdaj pa za rešitev te težave uporabimo čarobno metodo __get. V njej bomo vrnili vrednost zahtevane lastnosti. Kako to narediti: ime zahtevane lastnosti pride v parameter metode __get, v našem primeru $property.

To pomeni, da lahko preberemo lastnost, katere ime je shranjeno v spremenljivki, takole: $this->$property (ime lastnosti bo spremenljivka, torej z dolarjem na začetku, to smo obravnavali v prejšnjih lekcijah).

Naredimo opisano metodo __get:

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

Uporabimo jo za branje lastnosti:

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

Poskus zapisa nečesa v lastnost bo povzročil napako:

<?php $test = new Test; $test->prop1 = 2; // bo povzročilo napako ?>

To je točno tisto, kar potrebujemo: lastnost je mogoče brati, vanjo pa ni mogoče pisati.

Poskus branja neobstoječe lastnosti bo povzročil napako:

<?php $test = new Test; echo $test->prop3; // bo povzročilo napako ?>

Bodite pozorni tudi na naslednjo podrobnost: ko smo delali lastnosti samo za branje na stari način, smo za branje lastnosti uporabili metodo-getter.

V novem načinu bomo dostopali neposredno do lastnosti, kot da so javne. Vanje pa ne bomo mogli pisati, kot da so zasebne.

Dan naj bo naslednji razred User, katerega lastnosti so dostopne samo za branje s pomočjo getterjev:

<?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; } } ?>

Preoblikujte kodo tega razreda tako, da namesto getterjev uporabite čarobno metodo __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
Za delovanje spletnega mesta, analitiko in personalizacijo uporabljamo piškotke. Obdelava podatkov poteka v skladu s Politiko zasebnosti.
sprejmi vse nastavi zavrni