⊗ppOpMgROP 89 of 107 menu

Alleen-lezen eigenschappen in OOP in PHP

Laten we een klasse bekijken waarin alle eigenschappen privé zijn:

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

Laten we nu deze eigenschappen alleen-lezen maken in de externe wereld. We hebben dit eerder gedaan door getters te maken voor elke eigenschap en geen setters te maken.

Laten we nu voor deze taak gebruik maken van de magische methode __get. We zullen hierin de waarde van de opgevraagde eigenschap teruggeven. Hoe dit te doen: de naam van de opgevraagde eigenschap komt in de parameter van de methode __get, in ons geval $property.

Dit betekent dat we de eigenschap kunnen lezen, waarvan de naam in een variabele is opgeslagen, zo: $this->$property (de naam van de eigenschap zal een variabele zijn, dus met een dollarteken aan het begin, we hebben dit in eerdere lessen behandeld).

Laten we de beschreven methode __get maken:

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

Laten we hem gebruiken om eigenschappen te lezen:

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

Een poging om iets in de eigenschap te schrijven leidt tot een fout:

<?php $test = new Test; $test->prop1 = 2; // geeft een foutmelding ?>

Dit is precies wat we nodig hebben: de eigenschap kan worden gelezen, maar niet worden beschreven.

Een poging om een niet-bestaande eigenschap te lezen geeft een foutmelding:

<?php $test = new Test; echo $test->prop3; // geeft een foutmelding ?>

Let ook op het volgende nuance: toen we eigenschappen alleen-lezen maakten op de oude manier, gebruikten we om de eigenschap te lezen een getter-methode.

In de nieuwe manier zullen we ons rechtstreeks tot de eigenschappen wenden, alsof ze publiek zijn. Maar we kunnen er niet in schrijven, alsof ze privé zijn.

Stel we hebben de volgende klasse User, waarvan de eigenschappen alleen-lezen zijn 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; } } ?>

Herschrijf de code van deze klasse zodat in plaats van getters de magische methode __get wordt gebruikt.

Nederlands
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Wij gebruiken cookies voor de werking van de site, analyse en personalisatie. De verwerking van gegevens gebeurt volgens het Privacybeleid.
alles accepteren aanpassen weigeren