⊗ppOpMgROP 89 of 107 menu

Eienskappe slegs vir lees in OOP in PHP

Kom ons kyk na 'n klas waarin alle eienskappe privaat is:

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

Laat ons nou maak dat hierdie eienskappe in die eksterne wêreld slegs leesbaar is. Ons het dit vroeër reeds gedoen deur getters vir elke eienskap te skep sonder om setters te skep.

Kom ons gebruik nou die magiese metode __get om hierdie probleem op te los. Ons sal die waarde van die versoekte eienskap daarin teruggee. Hoe om dit te doen: die naam van die versoekte eienskap beland in die parameter van die metode __get, in ons geval $property.

Dit beteken dat ons die eienskap kan lees waarvan die naam in die veranderlike gestoor is, soos volg: $this->$property (die naam van die eienskap sal 'n veranderlike wees, dit wil sê met 'n dollarteken aan die begin, ons het dit in vorige lesse behandel).

Kom ons maak die beskryfde metode __get:

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

Kom ons gebruik dit om eienskappe te lees:

<?php $test = new Test; echo $test->prop1; // sal 1 uitvoer echo $test->prop2; // sal 2 uitvoer ?>

'n Poging om iets in die eienskap te skryf sal lei tot 'n fout:

<?php $test = new Test; $test->prop1 = 2; // sal 'n fout gee ?>

Dit is presies wat ons nodig het: die eienskap kan gelees word, maar nie geskryf word nie.

'n Poging om 'n nie-bestaande eienskap te lees sal 'n fout gee:

<?php $test = new Test; echo $test->prop3; // sal 'n fout gee ?>

Let ook op die volgende fyn punt: toe ons eienskappe slegs leesbaar gemaak het op die ou manier, het ons 'n getter-metode gebruik om die eienskap te lees.

In die nuwe manier sal ons direk na eienskappe verwys, asof hulle publiek is. Maar ons sal nie daarin kan skryf nie, asof hulle privaat is.

Gestel daar is 'n klas User waarvan die eienskappe slegs leesbaar is met behulp van getters:

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

Herskep die kode van hierdie klas sodat in plaas van getters, die magiese metode __get gebruik word.

Afrikaans
AzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικά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
Ons gebruik koekies vir die werking van die webwerf, ontleding en personalisering. Die verwerking van data geskied volgens die Privaatheidsbeleid.
aanvaar alles instel verwerp