![]() |
PHP getters i klasser, funkar det?
Jag har testat lite php för skoj skull och nyfikenhet. Ville se hur implementationen av objektorrientering ser ut i PHP.
Hittils är jag inte ett dugg impad, de exempel på klasser, metoder och object på php.net lämnar mycket ett önska. Hur som helst så testade jag hur det står till med getters och setters som finns i de flesta andra objektoerienterade programmeringsspråk. Setters fick jag att funka även om det ser väldigt oelegangt löst ut enligt syntaxen, men det funkar i alla fall. Men getters har jag inte lyckats få till. Hur tusan åstadkommer man det på ett bra sätt? Bifogar min testkod som kompilerar felfritt som den ser ut med version 5.3.15. Kod:
<?php |
Använd __get och __set
PHP har två så kallade magiska funktioner för att implementera getters och setters. De heter __get respektive __set och de tar emot värdets namn som argument.
Här är en snabb klass för att demonstrera det hela. Kod:
class Person Kod:
class Person Kod:
$person = new Person(); |
public string function _get_firstName() => public function _get_firstName()
|
Nu har jag testat vidare och får ett nasty felkod på 255 som jag inte inser vad det är. Har ingen riktig IDE utan kör med Textpad som editor.
La till felhantering i get och set så man fångar upp felaktiga propertynamn. Kod:
<?php |
Vad får du för felmeddelande?
|
Om du skriver korrekta kommentarer och lägger till det kommatecken som saknas så ser det ut att fungera.
Kod:
<?php |
Nu har jag fått till det som jag vill ha det, ett tydligt felmeddelande när man använder odefinierade egenskaper på en klass (det borde vara inbyggt i ett objektorienterat språk):
Kod:
<?php |
Edit: äh, glöm det....
|
Edit: glöm det...
|
Nu vet jag inte vad du egentligen är ute efter men att behöva ange alla godkända egenskaper i __set och __get känns omständigt.
Jag skulle gjort såhär: http://pastebin.com/ZDzJM0NL Och för att lägga till nya egenskaper som ska kunna sättas definierar du först scopet och sen sätter dem till något defaultvärde i konstruktorn. |
Alla tider är GMT +2. Klockan är nu 22:29. |
Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson