⊗ppOpMgROP 89 of 107 menu

Skrivebeskyttede egenskaper i OOP i PHP

La oss se på en klasse hvor alle egenskapene er private:

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

La oss nå gjøre slik at disse egenskapene i den eksterne verden kun er tilgjengelige for lesing. Tidligere har vi gjort dette ved å lage gettere for hver egenskap og ikke lage settere.

La oss nå bruke den magiske metoden __get for å løse denne oppgaven. Vi skal returnere verdien til den etterspurte egenskapen i den. Hvordan gjøre dette: navnet på den etterspurte egenskapen havner i parameteren til metoden __get, i vårt tilfelle $property.

Dette betyr at vi kan lese egenskapen, hvis navn er lagret i variabelen, slik: $this->$property (egenskapsnavnet vil være en variabel, det vil si med dollar-tegn foran, dette har vi gått gjennom i tidligere leksjoner).

La oss lage den beskrevne metoden __get:

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

La oss bruke den til å lese egenskaper:

<?php $test = new Test; echo $test->prop1; // vil skrive ut 1 echo $test->prop2; // vil skrive ut 2 ?>

Et forsøk på å skrive noe til egenskapen vil føre til en feil:

<?php $test = new Test; $test->prop1 = 2; // vil gi en feil ?>

Dette er akkurat det vi trenger: egenskapen kan leses, men ikke skrives til.

Et forsøk på å lese en ikke-eksisterende egenskap vil gi en feil:

<?php $test = new Test; echo $test->prop3; // vil gi en feil ?>

Vær også oppmerksom på følgende nyans: da vi lagde skrivebeskyttede egenskaper på den gamle måten, brukte vi en getter-metode for å lese egenskapen.

I den nye metoden vil vi henvise direkte til egenskapene, som om de var offentlige. Men vi vil ikke kunne skrive til dem, som om de var private.

Anta at vi har følgende klasse User, hvis egenskaper kun er tilgjengelige for lesing ved hjelp av gettere:

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

Omgjør koden til denne klassen slik at den magiske metoden __get brukes i stedet for gettere.

Norsk
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Vi bruker informasjonskapsler for nettstedets funksjonalitet, analyse og personalisering. Behandling av data foregår i henhold til Personvernerklæringen.
godta alle tilpass avvis