⊗ppOpMgROP 89 of 107 menu

Kirjutamatuad omadused OOP-s PHP-s

Vaatleme klassi, kus kõik omadused on privaatsed:

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

Teeme nüüd nii, et need omadused oleksid välises maailmas saadaval ainult lugemiseks. Oleme seda varem teinud, luues iga omaduse jaoks getterid ja mitte luues settereid.

Kasutame nüüd selle ülesande lahendamiseks magilist meetodit __get. Tagastame selles päritud omaduse väärtuse. Kuidas seda teha: päritud omaduse nimi satub meetodi __get parameetrisse, meie puhul $property.

See tähendab, et me saame lugeda omadust, mille nimi on salvestatud muutujasse, nii: $this->$property (omaduse nimi on muutuv, see tähendab dollarmärgiga alguses, me oleme seda õppinud eelmistes õppetundides).

Teeme kirjeldatud meetodi __get:

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

Kasutame seda omaduste lugemiseks:

<?php $test = new Test; echo $test->prop1; // väljastab 1 echo $test->prop2; // väljastab 2 ?>

Katse midagi omadusse kirjutada viib veani:

<?php $test = new Test; $test->prop1 = 2; // annab vea ?>

See on täpselt see, mida me vajame: omadust saab lugeda, kuid sinna ei saa kirjutada.

Katse lugeda olematut omadust annab vea:

<?php $test = new Test; echo $test->prop3; // annab vea ?>

Pange tähele ka järgmist nüanssi: kui me tegime omadused kirjutamatuteks vanal viisil, siis omaduse lugemiseks kasutasime meetodit-getterit.

Uues viisis me pöördume otse omaduste poole, justkui need oleksid avalikud. Kuid sinna kirjutada ei saa, justkui need oleksid privaatsed.

Olgu antud järgmine klass User, mille omadused on saadaval ainult lugemiseks kasutades gettereid:

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

Teisendage selle klassi kood nii, et getterite asemel kasutatakse magilist meetodit __get.

Eesti
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Me kasutame saidi toimimiseks, analüüsi ja personaliseerimiseks küpsiseid. Andmete töötlemine toimub vastavalt Privaatsuspoliitikale.
nõustu kõigega häälesta keeldu