⊗ppOpMgROP 89 of 107 menu

Skrivskyddade egenskaper i OOP i PHP

Låt oss titta på en klass där alla egenskaper är privata:

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

Låt oss nu göra så att dessa egenskaper i den externa världen endast är tillgängliga för läsning. Vi har gjort detta tidigare genom att skapa getters för varje egenskap och inte skapa setters.

Låt oss nu använda oss av den magiska metoden __get för att lösa denna uppgift. Vi kommer att returnera värdet på den efterfrågade egenskapen i den. Hur man gör detta: namnet på den efterfrågade egenskapen hamnar i parametern för metoden __get, i vårt fall $property.

Det betyder att vi kan läsa egenskapen, vars namn lagras i en variabel, så här: $this->$property (egenskapens namn kommer att vara en variabel, det vill säga med ett dollartecken i början, vi har gått igenom detta i tidigare lektioner).

Låt oss skapa den beskrivna metoden __get:

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

Låt oss använda den för att läsa egenskaper:

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

Ett försök att skriva något till egenskapen kommer att leda till ett fel:

<?php $test = new Test; $test->prop1 = 2; // ger ett fel ?>

Det är precis vad vi behöver: egenskapen kan läsas, men inte skrivas.

Ett försök att läsa en egenskap som inte finns kommer att ge ett fel:

<?php $test = new Test; echo $test->prop3; // ger ett fel ?>

Var även uppmärksam på följande nyans: när vi gjorde egenskaper skrivskyddade på det gamla sättet, använde vi en getter-metod för att läsa egenskapen.

I det nya sättet kommer vi att hänvisa direkt till egenskaperna, som om de vore publika. Men vi kommer inte att kunna skriva till dem, som om de vore privata.

Antag att vi har följande klass User, vars egenskaper endast är läsbara med hjälp av 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; } } ?>

Omvandla koden för denna klass så att den magiska metoden __get används istället för getters.

Svenska
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Vi använder kakor för webbplatsens funktion, analys och personalisering. Behandling av data sker i enlighet med Integritetspolicyn.
acceptera alla anpassa avvisa